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

Commit d8d7fc67 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Stops the loop when all files are closed."

parents e631e470 30e68088
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