Loading libappfuse/FuseBridgeLoop.cc +21 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ bool FuseBridgeLoop::Start( base::unique_fd dev_fd(raw_dev_fd); base::unique_fd proxy_fd(raw_proxy_fd); fuse::FuseBuffer buffer; size_t open_count = 0; LOG(DEBUG) << "Start fuse loop."; while (true) { Loading Loading @@ -71,8 +72,26 @@ bool FuseBridgeLoop::Start( return false; } if (opcode == FUSE_INIT) { switch (opcode) { case FUSE_INIT: callback->OnMount(); break; case FUSE_OPEN: if (buffer.response.header.error == fuse::kFuseSuccess) { open_count++; } break; case FUSE_RELEASE: if (open_count != 0) { open_count--; } else { LOG(WARNING) << "Unexpected FUSE_RELEASE before opening a file."; break; } if (open_count == 0) { return true; } break; } } } Loading libappfuse/tests/FuseBridgeLoopTest.cc +7 −2 Original line number Diff line number Diff line Loading @@ -200,11 +200,16 @@ TEST_F(FuseBridgeLoopTest, FuseNotImpl) { TEST_F(FuseBridgeLoopTest, Proxy) { CheckProxy(FUSE_LOOKUP); CheckProxy(FUSE_GETATTR); CheckProxy(FUSE_OPEN); CheckProxy(FUSE_READ); CheckProxy(FUSE_WRITE); CheckProxy(FUSE_RELEASE); CheckProxy(FUSE_FSYNC); // Invoke FUSE_OPEN and FUSE_RELEASE at last as the loop will exit when all files are closed. CheckProxy(FUSE_OPEN); CheckProxy(FUSE_RELEASE); // Ensure the loop exits. Close(); } } // namespace fuse Loading Loading
libappfuse/FuseBridgeLoop.cc +21 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ bool FuseBridgeLoop::Start( base::unique_fd dev_fd(raw_dev_fd); base::unique_fd proxy_fd(raw_proxy_fd); fuse::FuseBuffer buffer; size_t open_count = 0; LOG(DEBUG) << "Start fuse loop."; while (true) { Loading Loading @@ -71,8 +72,26 @@ bool FuseBridgeLoop::Start( return false; } if (opcode == FUSE_INIT) { switch (opcode) { case FUSE_INIT: callback->OnMount(); break; case FUSE_OPEN: if (buffer.response.header.error == fuse::kFuseSuccess) { open_count++; } break; case FUSE_RELEASE: if (open_count != 0) { open_count--; } else { LOG(WARNING) << "Unexpected FUSE_RELEASE before opening a file."; break; } if (open_count == 0) { return true; } break; } } } Loading
libappfuse/tests/FuseBridgeLoopTest.cc +7 −2 Original line number Diff line number Diff line Loading @@ -200,11 +200,16 @@ TEST_F(FuseBridgeLoopTest, FuseNotImpl) { TEST_F(FuseBridgeLoopTest, Proxy) { CheckProxy(FUSE_LOOKUP); CheckProxy(FUSE_GETATTR); CheckProxy(FUSE_OPEN); CheckProxy(FUSE_READ); CheckProxy(FUSE_WRITE); CheckProxy(FUSE_RELEASE); CheckProxy(FUSE_FSYNC); // Invoke FUSE_OPEN and FUSE_RELEASE at last as the loop will exit when all files are closed. CheckProxy(FUSE_OPEN); CheckProxy(FUSE_RELEASE); // Ensure the loop exits. Close(); } } // namespace fuse Loading