diff options
author | Daichi Hirono <hirono@google.com> | 2019-05-31 12:51:05 +0900 |
---|---|---|
committer | Daichi Hirono <hirono@google.com> | 2019-05-31 12:51:05 +0900 |
commit | ca0d4ffbe38a1997d8b1555210a184a5e0d112f4 (patch) | |
tree | a93cce816d72ec97df379bb9aa3b4c001dad235e /libappfuse | |
parent | cc18faf4d67c4f24474fcd621a083e31d8509a13 (diff) | |
download | core-ca0d4ffbe38a1997d8b1555210a184a5e0d112f4.tar.gz |
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
Diffstat (limited to 'libappfuse')
-rw-r--r-- | libappfuse/FuseBridgeLoop.cc | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/libappfuse/FuseBridgeLoop.cc b/libappfuse/FuseBridgeLoop.cc index ac94e6917..da40ec3f7 100644 --- a/libappfuse/FuseBridgeLoop.cc +++ b/libappfuse/FuseBridgeLoop.cc @@ -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; |