Loading libprocessgroup/include/processgroup/processgroup.h +8 −8 Original line number Diff line number Diff line Loading @@ -67,25 +67,25 @@ void DropTaskProfilesResourceCaching(); // Return 0 if all processes were killed and the cgroup was successfully removed. // Returns -1 in the case of an error occurring or if there are processes still running. int killProcessGroup(uid_t uid, int initialPid, int signal); int killProcessGroup(uid_t uid, pid_t initialPid, int signal); // Returns the same as killProcessGroup(), however it does not retry, which means // that it only returns 0 in the case that the cgroup exists and it contains no processes. int killProcessGroupOnce(uid_t uid, int initialPid, int signal); int killProcessGroupOnce(uid_t uid, pid_t initialPid, int signal); // Sends the provided signal to all members of a process group, but does not wait for processes to // exit, or for the cgroup to be removed. Callers should also ensure that killProcessGroup is called // later to ensure the cgroup is fully removed, otherwise system resources will leak. // Returns true if no errors are encountered sending signals, otherwise false. bool sendSignalToProcessGroup(uid_t uid, int initialPid, int signal); bool sendSignalToProcessGroup(uid_t uid, pid_t initialPid, int signal); int createProcessGroup(uid_t uid, int initialPid, bool memControl = false); int createProcessGroup(uid_t uid, pid_t initialPid, bool memControl = false); // Set various properties of a process group. For these functions to work, the process group must // have been created by passing memControl=true to createProcessGroup. bool setProcessGroupSwappiness(uid_t uid, int initialPid, int swappiness); bool setProcessGroupSoftLimit(uid_t uid, int initialPid, int64_t softLimitInBytes); bool setProcessGroupLimit(uid_t uid, int initialPid, int64_t limitInBytes); bool setProcessGroupSwappiness(uid_t uid, pid_t initialPid, int swappiness); bool setProcessGroupSoftLimit(uid_t uid, pid_t initialPid, int64_t softLimitInBytes); bool setProcessGroupLimit(uid_t uid, pid_t initialPid, int64_t limitInBytes); void removeAllEmptyProcessGroups(void); Loading @@ -95,7 +95,7 @@ bool getAttributePathForTask(const std::string& attr_name, int tid, std::string* // Check if a profile can be applied without failing. // Returns true if it can be applied without failing, false otherwise bool isProfileValidForProcess(const std::string& profile_name, uid_t uid, int pid); bool isProfileValidForProcess(const std::string& profile_name, uid_t uid, pid_t pid); #endif // __ANDROID_VNDK__ Loading libprocessgroup/processgroup.cpp +12 −12 Original line number Diff line number Diff line Loading @@ -82,7 +82,7 @@ static std::string ConvertUidToPath(const char* cgroup, uid_t uid) { return StringPrintf("%s/uid_%u", cgroup, uid); } static std::string ConvertUidPidToPath(const char* cgroup, uid_t uid, int pid) { static std::string ConvertUidPidToPath(const char* cgroup, uid_t uid, pid_t pid) { return StringPrintf("%s/uid_%u/pid_%d", cgroup, uid, pid); } Loading Loading @@ -232,7 +232,7 @@ bool SetUserProfiles(uid_t uid, const std::vector<std::string>& profiles) { false); } static int RemoveCgroup(const char* cgroup, uid_t uid, int pid) { static int RemoveCgroup(const char* cgroup, uid_t uid, pid_t pid) { auto path = ConvertUidPidToPath(cgroup, uid, pid); int ret = TEMP_FAILURE_RETRY(rmdir(path.c_str())); Loading Loading @@ -370,7 +370,7 @@ err: return false; } bool sendSignalToProcessGroup(uid_t uid, int initialPid, int signal) { bool sendSignalToProcessGroup(uid_t uid, pid_t initialPid, int signal) { std::set<pid_t> pgids, pids; if (CgroupsAvailable()) { Loading Loading @@ -525,7 +525,7 @@ static populated_status cgroupIsPopulated(int events_fd) { // implementation of this function. The default retry value was 40 for killing and 400 for cgroup // removal with 5ms sleeps between each retry. static int KillProcessGroup( uid_t uid, int initialPid, int signal, bool once = false, uid_t uid, pid_t initialPid, int signal, bool once = false, std::chrono::steady_clock::time_point until = std::chrono::steady_clock::now() + 2200ms) { CHECK_GE(uid, 0); CHECK_GT(initialPid, 0); Loading Loading @@ -632,15 +632,15 @@ static int KillProcessGroup( return ret; } int killProcessGroup(uid_t uid, int initialPid, int signal) { int killProcessGroup(uid_t uid, pid_t initialPid, int signal) { return KillProcessGroup(uid, initialPid, signal); } int killProcessGroupOnce(uid_t uid, int initialPid, int signal) { int killProcessGroupOnce(uid_t uid, pid_t initialPid, int signal) { return KillProcessGroup(uid, initialPid, signal, true); } static int createProcessGroupInternal(uid_t uid, int initialPid, std::string cgroup, static int createProcessGroupInternal(uid_t uid, pid_t initialPid, std::string cgroup, bool activate_controllers) { auto uid_path = ConvertUidToPath(cgroup.c_str(), uid); Loading Loading @@ -687,7 +687,7 @@ static int createProcessGroupInternal(uid_t uid, int initialPid, std::string cgr return ret; } int createProcessGroup(uid_t uid, int initialPid, bool memControl) { int createProcessGroup(uid_t uid, pid_t initialPid, bool memControl) { CHECK_GE(uid, 0); CHECK_GT(initialPid, 0); Loading Loading @@ -731,15 +731,15 @@ static bool SetProcessGroupValue(int tid, const std::string& attr_name, int64_t return true; } bool setProcessGroupSwappiness(uid_t, int pid, int swappiness) { bool setProcessGroupSwappiness(uid_t, pid_t pid, int swappiness) { return SetProcessGroupValue(pid, "MemSwappiness", swappiness); } bool setProcessGroupSoftLimit(uid_t, int pid, int64_t soft_limit_in_bytes) { bool setProcessGroupSoftLimit(uid_t, pid_t pid, int64_t soft_limit_in_bytes) { return SetProcessGroupValue(pid, "MemSoftLimit", soft_limit_in_bytes); } bool setProcessGroupLimit(uid_t, int pid, int64_t limit_in_bytes) { bool setProcessGroupLimit(uid_t, pid_t pid, int64_t limit_in_bytes) { return SetProcessGroupValue(pid, "MemLimit", limit_in_bytes); } Loading @@ -747,7 +747,7 @@ bool getAttributePathForTask(const std::string& attr_name, int tid, std::string* return CgroupGetAttributePathForTask(attr_name, tid, path); } bool isProfileValidForProcess(const std::string& profile_name, uid_t uid, int pid) { bool isProfileValidForProcess(const std::string& profile_name, uid_t uid, pid_t pid) { const TaskProfile* tp = TaskProfiles::GetInstance().GetProfile(profile_name); if (tp == nullptr) { Loading libprocessgroup/task_profiles.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -489,7 +489,7 @@ WriteFileAction::WriteFileAction(const std::string& task_path, const std::string } bool WriteFileAction::WriteValueToFile(const std::string& value_, ResourceCacheType cache_type, uid_t uid, int pid, bool logfailures) const { uid_t uid, pid_t pid, bool logfailures) const { std::string value(value_); value = StringReplace(value, "<uid>", std::to_string(uid), true); Loading Loading @@ -564,7 +564,7 @@ bool WriteFileAction::ExecuteForProcess(uid_t uid, pid_t pid) const { DIR* d; struct dirent* de; char proc_path[255]; int t_pid; pid_t t_pid; sprintf(proc_path, "/proc/%d/task", pid); if (!(d = opendir(proc_path))) { Loading libprocessgroup/task_profiles.h +1 −1 Original line number Diff line number Diff line Loading @@ -185,7 +185,7 @@ class WriteFileAction : public ProfileAction { mutable std::mutex fd_mutex_; bool WriteValueToFile(const std::string& value, ResourceCacheType cache_type, uid_t uid, int pid, bool logfailures) const; pid_t pid, bool logfailures) const; CacheUseResult UseCachedFd(ResourceCacheType cache_type, const std::string& value) const; }; Loading Loading
libprocessgroup/include/processgroup/processgroup.h +8 −8 Original line number Diff line number Diff line Loading @@ -67,25 +67,25 @@ void DropTaskProfilesResourceCaching(); // Return 0 if all processes were killed and the cgroup was successfully removed. // Returns -1 in the case of an error occurring or if there are processes still running. int killProcessGroup(uid_t uid, int initialPid, int signal); int killProcessGroup(uid_t uid, pid_t initialPid, int signal); // Returns the same as killProcessGroup(), however it does not retry, which means // that it only returns 0 in the case that the cgroup exists and it contains no processes. int killProcessGroupOnce(uid_t uid, int initialPid, int signal); int killProcessGroupOnce(uid_t uid, pid_t initialPid, int signal); // Sends the provided signal to all members of a process group, but does not wait for processes to // exit, or for the cgroup to be removed. Callers should also ensure that killProcessGroup is called // later to ensure the cgroup is fully removed, otherwise system resources will leak. // Returns true if no errors are encountered sending signals, otherwise false. bool sendSignalToProcessGroup(uid_t uid, int initialPid, int signal); bool sendSignalToProcessGroup(uid_t uid, pid_t initialPid, int signal); int createProcessGroup(uid_t uid, int initialPid, bool memControl = false); int createProcessGroup(uid_t uid, pid_t initialPid, bool memControl = false); // Set various properties of a process group. For these functions to work, the process group must // have been created by passing memControl=true to createProcessGroup. bool setProcessGroupSwappiness(uid_t uid, int initialPid, int swappiness); bool setProcessGroupSoftLimit(uid_t uid, int initialPid, int64_t softLimitInBytes); bool setProcessGroupLimit(uid_t uid, int initialPid, int64_t limitInBytes); bool setProcessGroupSwappiness(uid_t uid, pid_t initialPid, int swappiness); bool setProcessGroupSoftLimit(uid_t uid, pid_t initialPid, int64_t softLimitInBytes); bool setProcessGroupLimit(uid_t uid, pid_t initialPid, int64_t limitInBytes); void removeAllEmptyProcessGroups(void); Loading @@ -95,7 +95,7 @@ bool getAttributePathForTask(const std::string& attr_name, int tid, std::string* // Check if a profile can be applied without failing. // Returns true if it can be applied without failing, false otherwise bool isProfileValidForProcess(const std::string& profile_name, uid_t uid, int pid); bool isProfileValidForProcess(const std::string& profile_name, uid_t uid, pid_t pid); #endif // __ANDROID_VNDK__ Loading
libprocessgroup/processgroup.cpp +12 −12 Original line number Diff line number Diff line Loading @@ -82,7 +82,7 @@ static std::string ConvertUidToPath(const char* cgroup, uid_t uid) { return StringPrintf("%s/uid_%u", cgroup, uid); } static std::string ConvertUidPidToPath(const char* cgroup, uid_t uid, int pid) { static std::string ConvertUidPidToPath(const char* cgroup, uid_t uid, pid_t pid) { return StringPrintf("%s/uid_%u/pid_%d", cgroup, uid, pid); } Loading Loading @@ -232,7 +232,7 @@ bool SetUserProfiles(uid_t uid, const std::vector<std::string>& profiles) { false); } static int RemoveCgroup(const char* cgroup, uid_t uid, int pid) { static int RemoveCgroup(const char* cgroup, uid_t uid, pid_t pid) { auto path = ConvertUidPidToPath(cgroup, uid, pid); int ret = TEMP_FAILURE_RETRY(rmdir(path.c_str())); Loading Loading @@ -370,7 +370,7 @@ err: return false; } bool sendSignalToProcessGroup(uid_t uid, int initialPid, int signal) { bool sendSignalToProcessGroup(uid_t uid, pid_t initialPid, int signal) { std::set<pid_t> pgids, pids; if (CgroupsAvailable()) { Loading Loading @@ -525,7 +525,7 @@ static populated_status cgroupIsPopulated(int events_fd) { // implementation of this function. The default retry value was 40 for killing and 400 for cgroup // removal with 5ms sleeps between each retry. static int KillProcessGroup( uid_t uid, int initialPid, int signal, bool once = false, uid_t uid, pid_t initialPid, int signal, bool once = false, std::chrono::steady_clock::time_point until = std::chrono::steady_clock::now() + 2200ms) { CHECK_GE(uid, 0); CHECK_GT(initialPid, 0); Loading Loading @@ -632,15 +632,15 @@ static int KillProcessGroup( return ret; } int killProcessGroup(uid_t uid, int initialPid, int signal) { int killProcessGroup(uid_t uid, pid_t initialPid, int signal) { return KillProcessGroup(uid, initialPid, signal); } int killProcessGroupOnce(uid_t uid, int initialPid, int signal) { int killProcessGroupOnce(uid_t uid, pid_t initialPid, int signal) { return KillProcessGroup(uid, initialPid, signal, true); } static int createProcessGroupInternal(uid_t uid, int initialPid, std::string cgroup, static int createProcessGroupInternal(uid_t uid, pid_t initialPid, std::string cgroup, bool activate_controllers) { auto uid_path = ConvertUidToPath(cgroup.c_str(), uid); Loading Loading @@ -687,7 +687,7 @@ static int createProcessGroupInternal(uid_t uid, int initialPid, std::string cgr return ret; } int createProcessGroup(uid_t uid, int initialPid, bool memControl) { int createProcessGroup(uid_t uid, pid_t initialPid, bool memControl) { CHECK_GE(uid, 0); CHECK_GT(initialPid, 0); Loading Loading @@ -731,15 +731,15 @@ static bool SetProcessGroupValue(int tid, const std::string& attr_name, int64_t return true; } bool setProcessGroupSwappiness(uid_t, int pid, int swappiness) { bool setProcessGroupSwappiness(uid_t, pid_t pid, int swappiness) { return SetProcessGroupValue(pid, "MemSwappiness", swappiness); } bool setProcessGroupSoftLimit(uid_t, int pid, int64_t soft_limit_in_bytes) { bool setProcessGroupSoftLimit(uid_t, pid_t pid, int64_t soft_limit_in_bytes) { return SetProcessGroupValue(pid, "MemSoftLimit", soft_limit_in_bytes); } bool setProcessGroupLimit(uid_t, int pid, int64_t limit_in_bytes) { bool setProcessGroupLimit(uid_t, pid_t pid, int64_t limit_in_bytes) { return SetProcessGroupValue(pid, "MemLimit", limit_in_bytes); } Loading @@ -747,7 +747,7 @@ bool getAttributePathForTask(const std::string& attr_name, int tid, std::string* return CgroupGetAttributePathForTask(attr_name, tid, path); } bool isProfileValidForProcess(const std::string& profile_name, uid_t uid, int pid) { bool isProfileValidForProcess(const std::string& profile_name, uid_t uid, pid_t pid) { const TaskProfile* tp = TaskProfiles::GetInstance().GetProfile(profile_name); if (tp == nullptr) { Loading
libprocessgroup/task_profiles.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -489,7 +489,7 @@ WriteFileAction::WriteFileAction(const std::string& task_path, const std::string } bool WriteFileAction::WriteValueToFile(const std::string& value_, ResourceCacheType cache_type, uid_t uid, int pid, bool logfailures) const { uid_t uid, pid_t pid, bool logfailures) const { std::string value(value_); value = StringReplace(value, "<uid>", std::to_string(uid), true); Loading Loading @@ -564,7 +564,7 @@ bool WriteFileAction::ExecuteForProcess(uid_t uid, pid_t pid) const { DIR* d; struct dirent* de; char proc_path[255]; int t_pid; pid_t t_pid; sprintf(proc_path, "/proc/%d/task", pid); if (!(d = opendir(proc_path))) { Loading
libprocessgroup/task_profiles.h +1 −1 Original line number Diff line number Diff line Loading @@ -185,7 +185,7 @@ class WriteFileAction : public ProfileAction { mutable std::mutex fd_mutex_; bool WriteValueToFile(const std::string& value, ResourceCacheType cache_type, uid_t uid, int pid, bool logfailures) const; pid_t pid, bool logfailures) const; CacheUseResult UseCachedFd(ResourceCacheType cache_type, const std::string& value) const; }; Loading