From aa1d54f0ccbb01c636ba05be130c03cc28c9bb9e Mon Sep 17 00:00:00 2001 From: Suren Baghdasaryan Date: Wed, 12 Jun 2019 06:43:20 -0700 Subject: [PATCH] Remove ACgroupController_getFlags to fix API breakage Since ACgroupController_getFlags was introduced after LLNDK freeze it causes media crashes due to missing symbol. Remove the new function and re-implement cgroup controller detection to not require flags field but instead check for its existence on the first access. Bug: 135049992 Test: libcutils_test with and without CONFIG_CPUSETS enabled Change-Id: I0220d6a926884dc22a7424d7d0a980c379c6f4eb Merged-In: I0220d6a926884dc22a7424d7d0a980c379c6f4eb Signed-off-by: Suren Baghdasaryan --- libprocessgroup/cgroup_map.cpp | 5 ++--- libprocessgroup/cgrouprc/cgroup_controller.cpp | 5 ----- libprocessgroup/cgrouprc/include/android/cgrouprc.h | 9 +-------- libprocessgroup/cgrouprc/libcgrouprc.llndk.txt | 1 - 4 files changed, 3 insertions(+), 17 deletions(-) diff --git a/libprocessgroup/cgroup_map.cpp b/libprocessgroup/cgroup_map.cpp index 92fcd1e71..9797d763f 100644 --- a/libprocessgroup/cgroup_map.cpp +++ b/libprocessgroup/cgroup_map.cpp @@ -70,8 +70,8 @@ bool CgroupController::HasValue() const { bool CgroupController::IsUsable() const { if (!HasValue()) return false; - uint32_t flags = ACgroupController_getFlags(controller_); - return (flags & CGROUPRC_CONTROLLER_FLAG_MOUNTED) != 0; + static bool enabled = (access(GetProcsFilePath("", 0, 0).c_str(), F_OK) == 0); + return enabled; } std::string CgroupController::GetTasksFilePath(const std::string& rel_path) const { @@ -160,7 +160,6 @@ void CgroupMap::Print() const { const ACgroupController* controller = ACgroupFile_getController(i); LOG(INFO) << "\t" << ACgroupController_getName(controller) << " ver " << ACgroupController_getVersion(controller) << " path " - << ACgroupController_getFlags(controller) << " flags " << ACgroupController_getPath(controller); } } diff --git a/libprocessgroup/cgrouprc/cgroup_controller.cpp b/libprocessgroup/cgrouprc/cgroup_controller.cpp index 5a326e55d..d064d312e 100644 --- a/libprocessgroup/cgrouprc/cgroup_controller.cpp +++ b/libprocessgroup/cgrouprc/cgroup_controller.cpp @@ -27,11 +27,6 @@ uint32_t ACgroupController_getVersion(const ACgroupController* controller) { return controller->version(); } -uint32_t ACgroupController_getFlags(const ACgroupController* controller) { - CHECK(controller != nullptr); - return controller->flags(); -} - const char* ACgroupController_getName(const ACgroupController* controller) { CHECK(controller != nullptr); return controller->name(); diff --git a/libprocessgroup/cgrouprc/include/android/cgrouprc.h b/libprocessgroup/cgrouprc/include/android/cgrouprc.h index ffc9f0b60..0f6a9cd5d 100644 --- a/libprocessgroup/cgrouprc/include/android/cgrouprc.h +++ b/libprocessgroup/cgrouprc/include/android/cgrouprc.h @@ -66,17 +66,10 @@ __attribute__((warn_unused_result)) uint32_t ACgroupController_getVersion(const __INTRODUCED_IN(29); /** - * Flag bitmask used in ACgroupController_getFlags + * Flag bitmask to be used when ACgroupController_getFlags can be exported */ #define CGROUPRC_CONTROLLER_FLAG_MOUNTED 0x1 -/** - * Returns the flags bitmask of the given controller. - * If the given controller is null, return 0. - */ -__attribute__((warn_unused_result)) uint32_t ACgroupController_getFlags(const ACgroupController*) - __INTRODUCED_IN(29); - /** * Returns the name of the given controller. * If the given controller is null, return nullptr. diff --git a/libprocessgroup/cgrouprc/libcgrouprc.llndk.txt b/libprocessgroup/cgrouprc/libcgrouprc.llndk.txt index ea3df33e6..91df3929d 100644 --- a/libprocessgroup/cgrouprc/libcgrouprc.llndk.txt +++ b/libprocessgroup/cgrouprc/libcgrouprc.llndk.txt @@ -4,7 +4,6 @@ LIBCGROUPRC { # introduced=29 ACgroupFile_getControllerCount; ACgroupFile_getController; ACgroupController_getVersion; - ACgroupController_getFlags; ACgroupController_getName; ACgroupController_getPath; local: