Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 88b99fbd authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Revive ACgroupController_getFlags LLNDK function to detect missing cgroups" am: 77840a18

Change-Id: If7d0d03e7b055919f25ad7882dd69ecaf7e78568
parents 4eb7ba46 77840a18
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -71,8 +71,13 @@ bool CgroupController::IsUsable() {
    if (!HasValue()) return false;

    if (state_ == UNKNOWN) {
        if (ACgroupController_getFlags != nullptr) {
            uint32_t flags = ACgroupController_getFlags(controller_);
            state_ = (flags & CGROUPRC_CONTROLLER_FLAG_MOUNTED) != 0 ? USABLE : MISSING;
        } else {
            state_ = access(GetProcsFilePath("", 0, 0).c_str(), F_OK) == 0 ? USABLE : MISSING;
        }
    }

    return state_ == USABLE;
}
@@ -161,11 +166,18 @@ void CgroupMap::Print() const {
    auto controller_count = ACgroupFile_getControllerCount();
    for (uint32_t i = 0; i < controller_count; ++i) {
        const ACgroupController* controller = ACgroupFile_getController(i);
        if (ACgroupController_getFlags != nullptr) {
            LOG(INFO) << "\t" << ACgroupController_getName(controller) << " ver "
                      << ACgroupController_getVersion(controller) << " path "
                      << ACgroupController_getPath(controller) << " flags "
                      << ACgroupController_getFlags(controller);
        } else {
            LOG(INFO) << "\t" << ACgroupController_getName(controller) << " ver "
                      << ACgroupController_getVersion(controller) << " path "
                      << ACgroupController_getPath(controller);
        }
    }
}

CgroupController CgroupMap::FindController(const std::string& name) const {
    if (!loaded_) {
+5 −0
Original line number Diff line number Diff line
@@ -27,6 +27,11 @@ 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();
+12 −1
Original line number Diff line number Diff line
@@ -66,10 +66,21 @@ __attribute__((warn_unused_result)) uint32_t ACgroupController_getVersion(const
        __INTRODUCED_IN(29);

/**
 * Flag bitmask to be used when ACgroupController_getFlags can be exported
 * Flag bitmask used in ACgroupController_getFlags
 */
#define CGROUPRC_CONTROLLER_FLAG_MOUNTED 0x1

#if __ANDROID_API__ >= __ANDROID_API_R__

/**
 * Returns the flags bitmask of the given controller.
 * If the given controller is null, return 0.
 */
__attribute__((warn_unused_result, weak)) uint32_t ACgroupController_getFlags(
        const ACgroupController*) __INTRODUCED_IN(30);

#endif

/**
 * Returns the name of the given controller.
 * If the given controller is null, return nullptr.
+7 −0
Original line number Diff line number Diff line
@@ -9,3 +9,10 @@ LIBCGROUPRC { # introduced=29
  local:
    *;
};

LIBCGROUPRC_30 { # introduced=30
  global:
    ACgroupController_getFlags;
  local:
    *;
};