Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ac982d26 authored by Daichi Hirono's avatar Daichi Hirono Committed by android-build-merger
Browse files

Merge "Stops the loop when all files are closed." am: d8d7fc67

am: 920b0290

Change-Id: If2d271322d717b2fc530dcc11d7b341d886f1212
parents c98fa1a5 920b0290
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -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) {
@@ -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;
    }
  }
}
+7 −2
Original line number Diff line number Diff line
@@ -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