Fix BridgeEpollController to handles EAGAIN correctly

When reading/writing proxy FD, if it returns EAGAIN,
BridgeEpollController updates epoll entries to observe specific FD
events. Before updating epoll entries, BridgeEpollController checks if
it really needs to update by comparing |state_| and |last_state_|.
|last_state_| has not been updated correctly so it resulted in wrong
epoll settings and keeps blocking the event loop.

Bug: 134104939
Test: atest libappfuse_test
Change-Id: I1c4a0164c1c016baf24ecfd523476ced981d3b28
This commit is contained in:
Daichi Hirono 2019-05-31 12:51:05 +09:00
parent cc18faf4d6
commit ca0d4ffbe3

View file

@ -86,6 +86,7 @@ class FuseBridgeEntry {
const bool proxy_read_ready = last_proxy_events_.events & EPOLLIN;
const bool proxy_write_ready = last_proxy_events_.events & EPOLLOUT;
last_state_ = state_;
last_device_events_.events = 0;
last_proxy_events_.events = 0;