summaryrefslogtreecommitdiff
path: root/libappfuse
diff options
context:
space:
mode:
authorDaichi Hirono <hirono@google.com>2019-05-31 12:51:05 +0900
committerDaichi Hirono <hirono@google.com>2019-05-31 12:51:05 +0900
commitca0d4ffbe38a1997d8b1555210a184a5e0d112f4 (patch)
treea93cce816d72ec97df379bb9aa3b4c001dad235e /libappfuse
parentcc18faf4d67c4f24474fcd621a083e31d8509a13 (diff)
downloadcore-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.cc1
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;