Loading init/init.cpp +18 −11 Original line number Original line Diff line number Diff line Loading @@ -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 { Loading @@ -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; } } } } Loading @@ -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; Loading Loading
init/init.cpp +18 −11 Original line number Original line Diff line number Diff line Loading @@ -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 { Loading @@ -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; } } } } Loading @@ -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; Loading