Loading libappfuse/FuseBridgeLoop.cc +12 −2 Original line number Diff line number Diff line Loading @@ -311,6 +311,8 @@ class BridgeEpollController : private EpollController { } }; std::recursive_mutex FuseBridgeLoop::mutex_; FuseBridgeLoop::FuseBridgeLoop() : opened_(true) { base::unique_fd epoll_fd(epoll_create1(EPOLL_CLOEXEC)); if (epoll_fd.get() == -1) { Loading @@ -328,7 +330,7 @@ bool FuseBridgeLoop::AddBridge(int mount_id, base::unique_fd dev_fd, base::uniqu std::unique_ptr<FuseBridgeEntry> bridge( new FuseBridgeEntry(mount_id, std::move(dev_fd), std::move(proxy_fd))); std::lock_guard<std::mutex> lock(mutex_); std::lock_guard<std::recursive_mutex> lock(mutex_); if (!opened_) { LOG(ERROR) << "Tried to add a mount to a closed bridge"; return false; Loading Loading @@ -372,7 +374,7 @@ void FuseBridgeLoop::Start(FuseBridgeLoopCallback* callback) { const bool wait_result = epoll_controller_->Wait(bridges_.size(), &entries); LOG(VERBOSE) << "Receive epoll events"; { std::lock_guard<std::mutex> lock(mutex_); std::lock_guard<std::recursive_mutex> lock(mutex_); if (!(wait_result && ProcessEventLocked(entries, callback))) { for (auto it = bridges_.begin(); it != bridges_.end();) { callback->OnClosed(it->second->mount_id()); Loading @@ -385,5 +387,13 @@ void FuseBridgeLoop::Start(FuseBridgeLoopCallback* callback) { } } void FuseBridgeLoop::Lock() { mutex_.lock(); } void FuseBridgeLoop::Unlock() { mutex_.unlock(); } } // namespace fuse } // namespace android libappfuse/include/libappfuse/FuseBridgeLoop.h +5 −1 Original line number Diff line number Diff line Loading @@ -50,6 +50,10 @@ class FuseBridgeLoop final { // thread from one which invokes |Start|. bool AddBridge(int mount_id, base::unique_fd dev_fd, base::unique_fd proxy_fd); static void Lock(); static void Unlock(); private: bool ProcessEventLocked(const std::unordered_set<FuseBridgeEntry*>& entries, FuseBridgeLoopCallback* callback); Loading @@ -60,7 +64,7 @@ class FuseBridgeLoop final { std::map<int, std::unique_ptr<FuseBridgeEntry>> bridges_; // Lock for multi-threading. std::mutex mutex_; static std::recursive_mutex mutex_; bool opened_; Loading Loading
libappfuse/FuseBridgeLoop.cc +12 −2 Original line number Diff line number Diff line Loading @@ -311,6 +311,8 @@ class BridgeEpollController : private EpollController { } }; std::recursive_mutex FuseBridgeLoop::mutex_; FuseBridgeLoop::FuseBridgeLoop() : opened_(true) { base::unique_fd epoll_fd(epoll_create1(EPOLL_CLOEXEC)); if (epoll_fd.get() == -1) { Loading @@ -328,7 +330,7 @@ bool FuseBridgeLoop::AddBridge(int mount_id, base::unique_fd dev_fd, base::uniqu std::unique_ptr<FuseBridgeEntry> bridge( new FuseBridgeEntry(mount_id, std::move(dev_fd), std::move(proxy_fd))); std::lock_guard<std::mutex> lock(mutex_); std::lock_guard<std::recursive_mutex> lock(mutex_); if (!opened_) { LOG(ERROR) << "Tried to add a mount to a closed bridge"; return false; Loading Loading @@ -372,7 +374,7 @@ void FuseBridgeLoop::Start(FuseBridgeLoopCallback* callback) { const bool wait_result = epoll_controller_->Wait(bridges_.size(), &entries); LOG(VERBOSE) << "Receive epoll events"; { std::lock_guard<std::mutex> lock(mutex_); std::lock_guard<std::recursive_mutex> lock(mutex_); if (!(wait_result && ProcessEventLocked(entries, callback))) { for (auto it = bridges_.begin(); it != bridges_.end();) { callback->OnClosed(it->second->mount_id()); Loading @@ -385,5 +387,13 @@ void FuseBridgeLoop::Start(FuseBridgeLoopCallback* callback) { } } void FuseBridgeLoop::Lock() { mutex_.lock(); } void FuseBridgeLoop::Unlock() { mutex_.unlock(); } } // namespace fuse } // namespace android
libappfuse/include/libappfuse/FuseBridgeLoop.h +5 −1 Original line number Diff line number Diff line Loading @@ -50,6 +50,10 @@ class FuseBridgeLoop final { // thread from one which invokes |Start|. bool AddBridge(int mount_id, base::unique_fd dev_fd, base::unique_fd proxy_fd); static void Lock(); static void Unlock(); private: bool ProcessEventLocked(const std::unordered_set<FuseBridgeEntry*>& entries, FuseBridgeLoopCallback* callback); Loading @@ -60,7 +64,7 @@ class FuseBridgeLoop final { std::map<int, std::unique_ptr<FuseBridgeEntry>> bridges_; // Lock for multi-threading. std::mutex mutex_; static std::recursive_mutex mutex_; bool opened_; Loading