libprocessgroup: Disable file descriptor caching temporarily
File descriptor caching breaks boot on Android Go and Svelte targets. Disable it temporarily to fix the builds and investigate the root cause further. Bug: 123868658 Test: Android Go device boots after this change Change-Id: Idd0209029cde8454ea99b9de030f7a317c2988d7 Signed-off-by: Suren Baghdasaryan <surenb@google.com>
This commit is contained in:
parent
5bccd33e0b
commit
bee9f5718b
2 changed files with 34 additions and 0 deletions
|
|
@ -132,6 +132,7 @@ bool SetCgroupAction::IsAppDependentPath(const std::string& path) {
|
|||
|
||||
SetCgroupAction::SetCgroupAction(const CgroupController* c, const std::string& p)
|
||||
: controller_(c), path_(p) {
|
||||
#ifdef CACHE_FILE_DESCRIPTORS
|
||||
// cache file descriptor only if path is app independent
|
||||
if (IsAppDependentPath(path_)) {
|
||||
// file descriptor is not cached
|
||||
|
|
@ -155,6 +156,7 @@ SetCgroupAction::SetCgroupAction(const CgroupController* c, const std::string& p
|
|||
}
|
||||
|
||||
fd_ = std::move(fd);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool SetCgroupAction::AddTidToCgroup(int tid, int fd) {
|
||||
|
|
@ -176,6 +178,7 @@ bool SetCgroupAction::AddTidToCgroup(int tid, int fd) {
|
|||
}
|
||||
|
||||
bool SetCgroupAction::ExecuteForProcess(uid_t uid, pid_t pid) const {
|
||||
#ifdef CACHE_FILE_DESCRIPTORS
|
||||
if (fd_ >= 0) {
|
||||
// fd is cached, reuse it
|
||||
if (!AddTidToCgroup(pid, fd_)) {
|
||||
|
|
@ -203,9 +206,24 @@ bool SetCgroupAction::ExecuteForProcess(uid_t uid, pid_t pid) const {
|
|||
}
|
||||
|
||||
return true;
|
||||
#else
|
||||
std::string procs_path = controller_->GetProcsFilePath(path_.c_str(), uid, pid);
|
||||
unique_fd tmp_fd(TEMP_FAILURE_RETRY(open(procs_path.c_str(), O_WRONLY | O_CLOEXEC)));
|
||||
if (tmp_fd < 0) {
|
||||
// no permissions to access the file, ignore
|
||||
return true;
|
||||
}
|
||||
if (!AddTidToCgroup(pid, tmp_fd)) {
|
||||
PLOG(ERROR) << "Failed to add task into cgroup";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool SetCgroupAction::ExecuteForTask(int tid) const {
|
||||
#ifdef CACHE_FILE_DESCRIPTORS
|
||||
if (fd_ >= 0) {
|
||||
// fd is cached, reuse it
|
||||
if (!AddTidToCgroup(tid, fd_)) {
|
||||
|
|
@ -223,6 +241,20 @@ bool SetCgroupAction::ExecuteForTask(int tid) const {
|
|||
// application-dependent path can't be used with tid
|
||||
PLOG(ERROR) << "Application profile can't be applied to a thread";
|
||||
return false;
|
||||
#else
|
||||
std::string tasks_path = controller_->GetTasksFilePath(path_.c_str());
|
||||
unique_fd tmp_fd(TEMP_FAILURE_RETRY(open(tasks_path.c_str(), O_WRONLY | O_CLOEXEC)));
|
||||
if (tmp_fd < 0) {
|
||||
// no permissions to access the file, ignore
|
||||
return true;
|
||||
}
|
||||
if (!AddTidToCgroup(tid, tmp_fd)) {
|
||||
PLOG(ERROR) << "Failed to add task into cgroup";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool TaskProfile::ExecuteForProcess(uid_t uid, pid_t pid) const {
|
||||
|
|
|
|||
|
|
@ -117,7 +117,9 @@ class SetCgroupAction : public ProfileAction {
|
|||
private:
|
||||
const CgroupController* controller_;
|
||||
std::string path_;
|
||||
#ifdef CACHE_FILE_DESCRIPTORS
|
||||
android::base::unique_fd fd_;
|
||||
#endif
|
||||
|
||||
static bool IsAppDependentPath(const std::string& path);
|
||||
static bool AddTidToCgroup(int tid, int fd);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue