Handle restart request 09/298009/1
authorHwankyu Jhun <h.jhun@samsung.com>
Wed, 30 Aug 2023 04:39:43 +0000 (13:39 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Wed, 30 Aug 2023 04:39:43 +0000 (13:39 +0900)
Some platform developer wants to restart the loader process directly.
This patch supports the restart command.

Change-Id: I003891a8a9e5160c9b43d5ca11a61f3b79742662
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/launchpad-process-pool/launchpad.cc
src/launchpad-process-pool/launchpad.hh
src/lib/launchpad-common/types.hh

index 4733c99..672bc98 100644 (file)
@@ -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> request) {
   _D("[PAD_CMD_KILL_LOADER] loader_name: %s", loader_name.c_str());
 }
 
+void Launchpad::HandleRestartLoaderRequest(std::shared_ptr<Request> 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) {
index b287375..acf7670 100644 (file)
@@ -77,6 +77,7 @@ class Launchpad : public IOChannel::IEvent,
   void HandleConnectRequest(std::shared_ptr<Request> request);
   void HandleLaunchRequest(std::shared_ptr<Request> request);
   void HandleKillLoaderRequest(std::shared_ptr<Request> request);
+  void HandleRestartLoaderRequest(std::shared_ptr<Request> request);
 
   bool CanUseLoaderContext(const std::shared_ptr<LoaderContext>& context);
   LaunchResult ForkProcessing(std::shared_ptr<Request> request);
index dca55f4..7483b36 100644 (file)
@@ -58,6 +58,7 @@ enum PadCmd {
   PrepareAppDefinedLoader = 17,
   Connect = 18,
   KillLoader = 19,
+  RestartLoader = 20,
 };
 
 enum PadLoaderId {