diff --git a/libprocessgroup/task_profiles.cpp b/libprocessgroup/task_profiles.cpp index 40d8d902c..edc316a8d 100644 --- a/libprocessgroup/task_profiles.cpp +++ b/libprocessgroup/task_profiles.cpp @@ -150,6 +150,7 @@ SetCgroupAction::SetCgroupAction(const CgroupController& c, const std::string& p } void SetCgroupAction::EnableResourceCaching() { + std::lock_guard lock(fd_mutex_); if (fd_ != FDS_NOT_CACHED) { return; } @@ -191,6 +192,7 @@ bool SetCgroupAction::AddTidToCgroup(int tid, int fd) { } bool SetCgroupAction::ExecuteForProcess(uid_t uid, pid_t pid) const { + std::lock_guard lock(fd_mutex_); if (IsFdValid()) { // fd is cached, reuse it if (!AddTidToCgroup(pid, fd_)) { @@ -221,6 +223,7 @@ bool SetCgroupAction::ExecuteForProcess(uid_t uid, pid_t pid) const { } bool SetCgroupAction::ExecuteForTask(int tid) const { + std::lock_guard lock(fd_mutex_); if (IsFdValid()) { // fd is cached, reuse it if (!AddTidToCgroup(tid, fd_)) { diff --git a/libprocessgroup/task_profiles.h b/libprocessgroup/task_profiles.h index 445647dea..77bac2d94 100644 --- a/libprocessgroup/task_profiles.h +++ b/libprocessgroup/task_profiles.h @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -127,6 +128,7 @@ class SetCgroupAction : public ProfileAction { CgroupController controller_; std::string path_; android::base::unique_fd fd_; + mutable std::mutex fd_mutex_; static bool IsAppDependentPath(const std::string& path); static bool AddTidToCgroup(int tid, int fd);