From 2dde3302007ef8fa63c754f8a86339e87884f098 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Wed, 30 Aug 2023 13:39:43 +0900 Subject: [PATCH] Handle restart request Some platform developer wants to restart the loader process directly. This patch supports the restart command. Change-Id: I003891a8a9e5160c9b43d5ca11a61f3b79742662 Signed-off-by: Hwankyu Jhun --- src/launchpad-process-pool/launchpad.cc | 23 +++++++++++++++++++++++ src/launchpad-process-pool/launchpad.hh | 1 + src/lib/launchpad-common/types.hh | 1 + 3 files changed, 25 insertions(+) diff --git a/src/launchpad-process-pool/launchpad.cc b/src/launchpad-process-pool/launchpad.cc index 4733c99..672bc98 100644 --- a/src/launchpad-process-pool/launchpad.cc +++ b/src/launchpad-process-pool/launchpad.cc @@ -194,6 +194,9 @@ Launchpad::Launchpad(int argc, char** argv) { PadCmd::KillLoader, std::bind(&Launchpad::HandleKillLoaderRequest, this, std::placeholders::_1) }, + { PadCmd::RestartLoader, + std::bind(&Launchpad::HandleRestartLoaderRequest, this, + std::placeholders::_1) }, }; CPUBoostController::Level level; @@ -588,6 +591,26 @@ void Launchpad::HandleKillLoaderRequest(std::shared_ptr request) { _D("[PAD_CMD_KILL_LOADER] loader_name: %s", loader_name.c_str()); } +void Launchpad::HandleRestartLoaderRequest(std::shared_ptr request) { + auto& b = request->GetBundle(); + auto loader_name = b.GetString(kAulLoaderName); + auto loader_context = + LoaderManager::GetInst().FindLoaderContextFromName(loader_name); + if (loader_context == nullptr) { + _E("Failed to find loader context. loader_name(%s)", loader_name.c_str()); + return; + } + + if (loader_context->RefCount() == 0) + loader_context->Dispose(); + + if (loader_context->GetPid() < 1) + loader_context->Prepare(); + + _D("[PAD_CMD_RESTART_LOADER] loader_name: %s, pid: %d", + loader_name.c_str(), loader_context->GetPid()); +} + void Launchpad::OnIOEventReceived(int fd, int condition) { auto client_socket = socket_->Accept(); if (!client_socket) { diff --git a/src/launchpad-process-pool/launchpad.hh b/src/launchpad-process-pool/launchpad.hh index b287375..acf7670 100644 --- a/src/launchpad-process-pool/launchpad.hh +++ b/src/launchpad-process-pool/launchpad.hh @@ -77,6 +77,7 @@ class Launchpad : public IOChannel::IEvent, void HandleConnectRequest(std::shared_ptr request); void HandleLaunchRequest(std::shared_ptr request); void HandleKillLoaderRequest(std::shared_ptr request); + void HandleRestartLoaderRequest(std::shared_ptr request); bool CanUseLoaderContext(const std::shared_ptr& context); LaunchResult ForkProcessing(std::shared_ptr request); diff --git a/src/lib/launchpad-common/types.hh b/src/lib/launchpad-common/types.hh index dca55f4..7483b36 100644 --- a/src/lib/launchpad-common/types.hh +++ b/src/lib/launchpad-common/types.hh @@ -58,6 +58,7 @@ enum PadCmd { PrepareAppDefinedLoader = 17, Connect = 18, KillLoader = 19, + RestartLoader = 20, }; enum PadLoaderId { -- 2.7.4