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

Commit 46fa45d8 authored by Jooyung Han's avatar Jooyung Han Committed by Gerrit Code Review
Browse files

Merge "Return Result<T> from Do(Un)LoadApex()"

parents 86cc51ae a2fe3e57
Loading
Loading
Loading
Loading
+18 −11
Original line number Original line Diff line number Diff line
@@ -442,17 +442,19 @@ static Result<void> DoControlRestart(Service* service) {
    return {};
    return {};
}
}


static void DoUnloadApex(const std::string& apex_name) {
static Result<void> DoUnloadApex(const std::string& apex_name) {
    std::string prop_name = "init.apex." + apex_name;
    std::string prop_name = "init.apex." + apex_name;
    // TODO(b/232114573) remove services and actions read from the apex
    // TODO(b/232114573) remove services and actions read from the apex
    // TODO(b/232799709) kill services from the apex
    // TODO(b/232799709) kill services from the apex
    SetProperty(prop_name, "unloaded");
    SetProperty(prop_name, "unloaded");
    return {};
}
}


static void DoLoadApex(const std::string& apex_name) {
static Result<void> DoLoadApex(const std::string& apex_name) {
    std::string prop_name = "init.apex." + apex_name;
    std::string prop_name = "init.apex." + apex_name;
    // TODO(b/232799709) read .rc files from the apex
    // TODO(b/232799709) read .rc files from the apex
    SetProperty(prop_name, "loaded");
    SetProperty(prop_name, "loaded");
    return {};
}
}


enum class ControlTarget {
enum class ControlTarget {
@@ -478,17 +480,14 @@ static const std::map<std::string, ControlMessageFunction, std::less<>>& GetCont
    return control_message_functions;
    return control_message_functions;
}
}


static bool HandleApexControlMessage(std::string_view action, const std::string& name,
static Result<void> HandleApexControlMessage(std::string_view action, const std::string& name,
                                             std::string_view message) {
                                             std::string_view message) {
    if (action == "load") {
    if (action == "load") {
        DoLoadApex(name);
        return DoLoadApex(name);
        return true;
    } else if (action == "unload") {
    } else if (action == "unload") {
        DoUnloadApex(name);
        return DoUnloadApex(name);
        return true;
    } else {
    } else {
        LOG(ERROR) << "Unknown control msg '" << message << "'";
        return Error() << "Unknown control msg '" << message << "'";
        return false;
    }
    }
}
}


@@ -505,7 +504,15 @@ static bool HandleControlMessage(std::string_view message, const std::string& na


    auto action = message;
    auto action = message;
    if (ConsumePrefix(&action, "apex_")) {
    if (ConsumePrefix(&action, "apex_")) {
        return HandleApexControlMessage(action, name, message);
        if (auto result = HandleApexControlMessage(action, name, message); !result.ok()) {
            LOG(ERROR) << "Control message: Could not ctl." << message << " for '" << name
                       << "' from pid: " << from_pid << " (" << process_cmdline
                       << "): " << result.error();
            return false;
        }
        LOG(INFO) << "Control message: Processed ctl." << message << " for '" << name
                  << "' from pid: " << from_pid << " (" << process_cmdline << ")";
        return true;
    }
    }


    Service* service = nullptr;
    Service* service = nullptr;