From bbe59b865dfd907d5d810dcffe8220cf43d09cb8 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Tue, 18 Jul 2023 11:19:33 +0900 Subject: [PATCH 01/16] Modify setting environment variable If TIZEN_GLIB_CONTEXT already exists, the launchpad library does not set it to zero. Unfortunately, the launchpad library overwrites the environment variable even if the process is the candidate process as like dotnet loader. Change-Id: I3c1667627ac0955a422f96cc6b9264cbf05115ec Signed-off-by: Hwankyu Jhun --- src/lib/launchpad-glib/util.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib/launchpad-glib/util.cc b/src/lib/launchpad-glib/util.cc index 700eeca..f2588be 100644 --- a/src/lib/launchpad-glib/util.cc +++ b/src/lib/launchpad-glib/util.cc @@ -364,7 +364,9 @@ void Util::SetEnvironments(const AppInfo* app_info) { setenv("TIZEN_API_VERSION", value.c_str(), 1); setenv("AUL_PID", std::to_string(getpid()).c_str(), 1); - setenv("TIZEN_GLIB_CONTEXT", "0", 1); + + if (getenv("TIZEN_GLIB_CONTEXT") == nullptr) + setenv("TIZEN_GLIB_CONTEXT", "0", 1); SetLanguageEnvironments(); SetRegionFormatEnvironments(); -- 2.7.4 From df1ea199fcddfbdf4cf2a7aa55d0393c46aa73aa Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Tue, 18 Jul 2023 12:20:40 +0900 Subject: [PATCH 02/16] Release version 0.35.16 Changes: - Modify setting environment variable Change-Id: I4545de274b595c8276ecc64dcd249f80628686ee Signed-off-by: Hwankyu Jhun --- packaging/launchpad.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/launchpad.spec b/packaging/launchpad.spec index f64b81a..0ab3119 100644 --- a/packaging/launchpad.spec +++ b/packaging/launchpad.spec @@ -1,6 +1,6 @@ Name: launchpad Summary: Launchpad for launching applications -Version: 0.35.15 +Version: 0.35.16 Release: 1 Group: Application Framework/Daemons License: Apache-2.0 -- 2.7.4 From 63678f4ca793f2da09881f82f81cb66cba2d24c6 Mon Sep 17 00:00:00 2001 From: Changgyu Choi Date: Thu, 20 Jul 2023 14:09:24 +0900 Subject: [PATCH 03/16] Modify setting AUL_APPID environment variable for multiple instance When an app is launched as multiple instances, appid should include instance id to distinguish them. launchpad set AUL_APPID environment variable as original appid. Change-Id: Ie0cae1d5d10d51024ea1bd25ca6299ea15e4fac8 Signed-off-by: Changgyu Choi --- src/lib/launchpad-common/aul_keys.hh | 1 + src/lib/launchpad-glib/util.cc | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/lib/launchpad-common/aul_keys.hh b/src/lib/launchpad-common/aul_keys.hh index 82fb1db..6b478f1 100644 --- a/src/lib/launchpad-common/aul_keys.hh +++ b/src/lib/launchpad-common/aul_keys.hh @@ -51,6 +51,7 @@ constexpr const char kAulMountGlobalResDir[] = "__AUL_MOUNT_GLOBAL_RES_DIR__"; constexpr const char kAulMountAllowedResDir[] = "__AUL_MOUNT_ALLOWED_RES_DIR__"; constexpr const char kAulEnabledLightUser[] = "__AUL_ENABLED_LIGHT_USER__"; constexpr const char kAulMountResPkgIds[] = "__AUL_MOUNT_RES_PKGIDS__"; +constexpr const char kAulOrgAppId[] = "__AUL_ORG_APPID__"; } // namespace launchpad diff --git a/src/lib/launchpad-glib/util.cc b/src/lib/launchpad-glib/util.cc index f2588be..08b6518 100644 --- a/src/lib/launchpad-glib/util.cc +++ b/src/lib/launchpad-glib/util.cc @@ -342,8 +342,13 @@ void Util::SetEnvironments(const AppInfo* app_info) { if (!app_info->GetRootPath().empty()) setenv("AUL_ROOT_PATH", app_info->GetRootPath().c_str(), 1); - if (!app_info->GetAppId().empty()) - setenv("AUL_APPID", app_info->GetAppId().c_str(), 1); + if (!app_info->GetAppId().empty()) { + auto org_app_id = b.GetString(kAulOrgAppId); + if (!org_app_id.empty()) + setenv("AUL_APPID", org_app_id.c_str(), 1); + else + setenv("AUL_APPID", app_info->GetAppId().c_str(), 1); + } if (!app_info->GetPkgId().empty()) setenv("AUL_PKGID", app_info->GetPkgId().c_str(), 1); -- 2.7.4 From 8c136c9ab4430fff98dddeb12a734b17f9a5dac9 Mon Sep 17 00:00:00 2001 From: Changgyu Choi Date: Thu, 20 Jul 2023 14:43:51 +0900 Subject: [PATCH 04/16] Release version 0.35.17 Changes: - Modify setting AUL_APPID environment variable for multiple instance Change-Id: Iff650377315bd6329901a415940178cd1f0dc8da Signed-off-by: Changgyu Choi --- packaging/launchpad.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/launchpad.spec b/packaging/launchpad.spec index 0ab3119..03b14ef 100644 --- a/packaging/launchpad.spec +++ b/packaging/launchpad.spec @@ -1,6 +1,6 @@ Name: launchpad Summary: Launchpad for launching applications -Version: 0.35.16 +Version: 0.35.17 Release: 1 Group: Application Framework/Daemons License: Apache-2.0 -- 2.7.4 From 96c4e450dadad97403a53878676151fe2ec5be06 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Mon, 24 Jul 2023 16:01:57 +0900 Subject: [PATCH 05/16] Modify SIGCHLD handler If SIGCHLD signal is received, launchpad checks whether the pending request exists or not. If it exists, launchpad sends the launch signal to listeners. Change-Id: Ie82b4df2b49ce02beb95a4b7547584b6a674d424 Signed-off-by: Hwankyu Jhun --- src/launchpad-process-pool/dbus.cc | 2 +- src/launchpad-process-pool/launchpad.cc | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/launchpad-process-pool/dbus.cc b/src/launchpad-process-pool/dbus.cc index 36b02b9..da24593 100644 --- a/src/launchpad-process-pool/dbus.cc +++ b/src/launchpad-process-pool/dbus.cc @@ -165,7 +165,7 @@ class DBusManager { return; } - _D("[DBUS] %s", args->GetLogMessage().c_str()); + _W("[DBUS] %s", args->GetLogMessage().c_str()); } void WorkerThread() { diff --git a/src/launchpad-process-pool/launchpad.cc b/src/launchpad-process-pool/launchpad.cc index 1891bf5..1ffb1ec 100644 --- a/src/launchpad-process-pool/launchpad.cc +++ b/src/launchpad-process-pool/launchpad.cc @@ -598,6 +598,22 @@ void Launchpad::OnSigchldReceived(pid_t pid) { pid_map_.erase(found); } + auto iter = pending_requests_.begin(); + while (iter != pending_requests_.end()) { + auto request = *iter; + auto context = request->GetAvailableLoaderContext(); + if (context != nullptr && context->GetPid() == pid) { + context->Unref(); + auto* app_info = request->GetAppInfo(); + launchpad::DBus::SendAppLaunchSignal(context->GetPid(), + app_info->GetAppId().c_str()); + pending_requests_.erase(iter); + break; + } + + iter++; + } + launchpad::Log::Print("[SIGCHLD]", "pid(%7d)", pid); LoaderManager::GetInst().HandleSigchld(pid); } -- 2.7.4 From 2598650957bf107702481db811849b6a81e82f6a Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Mon, 24 Jul 2023 16:20:20 +0900 Subject: [PATCH 06/16] Release version 0.35.18 Changes: - Modify SIGCHLD handler Change-Id: I82d8c9b197885a893439b0232516d726b6f6986e Signed-off-by: Hwankyu Jhun --- packaging/launchpad.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/launchpad.spec b/packaging/launchpad.spec index 03b14ef..cb7c8a8 100644 --- a/packaging/launchpad.spec +++ b/packaging/launchpad.spec @@ -1,6 +1,6 @@ Name: launchpad Summary: Launchpad for launching applications -Version: 0.35.17 +Version: 0.35.18 Release: 1 Group: Application Framework/Daemons License: Apache-2.0 -- 2.7.4 From 3f3d13b9189361f9cee636ecfa354cf56bb65e82 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Wed, 26 Jul 2023 15:12:47 +0900 Subject: [PATCH 07/16] Handle loader termination request Some developers want to send the kill request to the running loader process. This patch adds a new handler to handle the kill request. Change-Id: Iad92282db51f60a8bb420739f406e1a426bb203e Signed-off-by: Hwankyu Jhun --- src/launchpad-process-pool/launchpad.cc | 19 +++++++++++++++++++ src/launchpad-process-pool/launchpad.hh | 1 + src/launchpad-process-pool/loader_manager.hh | 4 ++-- src/lib/launchpad-common/types.hh | 1 + 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/launchpad-process-pool/launchpad.cc b/src/launchpad-process-pool/launchpad.cc index 1ffb1ec..69ddf1a 100644 --- a/src/launchpad-process-pool/launchpad.cc +++ b/src/launchpad-process-pool/launchpad.cc @@ -191,6 +191,9 @@ Launchpad::Launchpad(int argc, char** argv) { PadCmd::Launch, std::bind(&Launchpad::HandleLaunchRequest, this, std::placeholders::_1) }, + { PadCmd::KillLoader, + std::bind(&Launchpad::HandleKillLoaderRequest, this, + std::placeholders::_1) }, }; CPUBoostController::DoBoost(getpid(), CPUBoostController::Level::Strong, @@ -558,6 +561,22 @@ void Launchpad::HandleLaunchRequest(std::shared_ptr request) { request->GetAppInfo()->GetAppId().c_str(), request->GetPid()); } +void Launchpad::HandleKillLoaderRequest(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(); + + _D("[PAD_CMD_KILL_LOADER] loader_name: %s", loader_name.c_str()); +} + 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 5300f31..b287375 100644 --- a/src/launchpad-process-pool/launchpad.hh +++ b/src/launchpad-process-pool/launchpad.hh @@ -76,6 +76,7 @@ class Launchpad : public IOChannel::IEvent, void HandleUpdateAppTypeRequest(std::shared_ptr request); void HandleConnectRequest(std::shared_ptr request); void HandleLaunchRequest(std::shared_ptr request); + void HandleKillLoaderRequest(std::shared_ptr request); bool CanUseLoaderContext(const std::shared_ptr& context); LaunchResult ForkProcessing(std::shared_ptr request); diff --git a/src/launchpad-process-pool/loader_manager.hh b/src/launchpad-process-pool/loader_manager.hh index 31e4ba0..76825ad 100644 --- a/src/launchpad-process-pool/loader_manager.hh +++ b/src/launchpad-process-pool/loader_manager.hh @@ -76,6 +76,8 @@ class LoaderManager : public AppDefinedLoaderInfoManager::IEvent, const std::string& loader_name); std::shared_ptr FindAlternativeLoaderContext(LoaderType type); void RemoveLoaderContext(LoaderType type, int loader_id); + std::shared_ptr FindLoaderContextFromName( + const std::string& loader_name); private: LoaderManager(); @@ -84,8 +86,6 @@ class LoaderManager : public AppDefinedLoaderInfoManager::IEvent, void Init(); std::shared_ptr FindLoaderContextFromPid(pid_t pid); std::shared_ptr FindHydraLoaderContextFromPid(pid_t pid); - std::shared_ptr FindLoaderContextFromName( - const std::string& loader_name); std::shared_ptr FindLoaderContextFromLoaderId(int loader_id); std::shared_ptr FindLoaderContextFromType(LoaderType type); void RemoveLoaderContextsByCallerPid(pid_t caller_pid); diff --git a/src/lib/launchpad-common/types.hh b/src/lib/launchpad-common/types.hh index e19b5b3..dca55f4 100644 --- a/src/lib/launchpad-common/types.hh +++ b/src/lib/launchpad-common/types.hh @@ -57,6 +57,7 @@ enum PadCmd { UpdateAppType = 16, PrepareAppDefinedLoader = 17, Connect = 18, + KillLoader = 19, }; enum PadLoaderId { -- 2.7.4 From 45d28573d27cae75c4a6dec477ca3adc79974cec Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Thu, 27 Jul 2023 11:13:12 +0900 Subject: [PATCH 08/16] Release version 0.36.0 Changes: - Handle loader termination request Change-Id: I0a4d6fd7ee908bde5fc79e08604a0f0aa2718d82 Signed-off-by: Hwankyu Jhun --- packaging/launchpad.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/launchpad.spec b/packaging/launchpad.spec index cb7c8a8..4960f77 100644 --- a/packaging/launchpad.spec +++ b/packaging/launchpad.spec @@ -1,6 +1,6 @@ Name: launchpad Summary: Launchpad for launching applications -Version: 0.35.18 +Version: 0.36.0 Release: 1 Group: Application Framework/Daemons License: Apache-2.0 -- 2.7.4 From 258cc771f70c128907f3646233c22fd6c3d1970e Mon Sep 17 00:00:00 2001 From: Changgyu Choi Date: Fri, 28 Jul 2023 10:54:38 +0900 Subject: [PATCH 09/16] Fix static analysis issues Changes: - Changes method to stoull. Change-Id: I802be7a7e343b219f1cded40ec9560c2886ee129 Signed-off-by: Changgyu Choi --- src/app-defined-loader/app-defined-loader.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app-defined-loader/app-defined-loader.cc b/src/app-defined-loader/app-defined-loader.cc index 01e73e0..57e7ffd 100644 --- a/src/app-defined-loader/app-defined-loader.cc +++ b/src/app-defined-loader/app-defined-loader.cc @@ -68,7 +68,7 @@ class AppDefinedLoader { IniParser parser(PATH_CONF); auto value = parser.Get(SECTION_MEMORY, KEY_THRESHOLD); if (!value.empty()) - threshold_ = static_cast(std::stoi(value)); + threshold_ = static_cast(std::stoull(value)); else _W("Failed to get threshold"); } -- 2.7.4 From e87cb3348b6b11235e024dd963655940a7d39e10 Mon Sep 17 00:00:00 2001 From: Changgyu Choi Date: Fri, 28 Jul 2023 13:33:59 +0900 Subject: [PATCH 10/16] Release version 0.36.1 Changes: - Fix static analysis issues Change-Id: I77826afded881cf7c7f5dde783905f1525fd2a0f Signed-off-by: Changgyu Choi --- packaging/launchpad.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/launchpad.spec b/packaging/launchpad.spec index 4960f77..e1dc46d 100644 --- a/packaging/launchpad.spec +++ b/packaging/launchpad.spec @@ -1,6 +1,6 @@ Name: launchpad Summary: Launchpad for launching applications -Version: 0.36.0 +Version: 0.36.1 Release: 1 Group: Application Framework/Daemons License: Apache-2.0 -- 2.7.4 From c15be5f3584066fc2a2095508f134d6840afff74 Mon Sep 17 00:00:00 2001 From: Changgyu Choi Date: Tue, 1 Aug 2023 12:15:33 +0900 Subject: [PATCH 11/16] Change multiple instance appid key Change-Id: I6586c84e52ee060dc64283eac23eefe96f2604e5 Signed-off-by: Changgyu Choi --- src/lib/launchpad-common/aul_keys.hh | 2 +- src/lib/launchpad-glib/util.cc | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/launchpad-common/aul_keys.hh b/src/lib/launchpad-common/aul_keys.hh index 6b478f1..4a4cc70 100644 --- a/src/lib/launchpad-common/aul_keys.hh +++ b/src/lib/launchpad-common/aul_keys.hh @@ -51,7 +51,7 @@ constexpr const char kAulMountGlobalResDir[] = "__AUL_MOUNT_GLOBAL_RES_DIR__"; constexpr const char kAulMountAllowedResDir[] = "__AUL_MOUNT_ALLOWED_RES_DIR__"; constexpr const char kAulEnabledLightUser[] = "__AUL_ENABLED_LIGHT_USER__"; constexpr const char kAulMountResPkgIds[] = "__AUL_MOUNT_RES_PKGIDS__"; -constexpr const char kAulOrgAppId[] = "__AUL_ORG_APPID__"; +constexpr const char kAulMultipleInstanceAppId[] = "__AUL_MULTIPLE_INSTANCE_APPID__"; } // namespace launchpad diff --git a/src/lib/launchpad-glib/util.cc b/src/lib/launchpad-glib/util.cc index 08b6518..9ab6d9e 100644 --- a/src/lib/launchpad-glib/util.cc +++ b/src/lib/launchpad-glib/util.cc @@ -343,9 +343,9 @@ void Util::SetEnvironments(const AppInfo* app_info) { setenv("AUL_ROOT_PATH", app_info->GetRootPath().c_str(), 1); if (!app_info->GetAppId().empty()) { - auto org_app_id = b.GetString(kAulOrgAppId); - if (!org_app_id.empty()) - setenv("AUL_APPID", org_app_id.c_str(), 1); + auto multiple_instance_app_id = b.GetString(kAulMultipleInstanceAppId); + if (!multiple_instance_app_id.empty()) + setenv("AUL_APPID", multiple_instance_app_id.c_str(), 1); else setenv("AUL_APPID", app_info->GetAppId().c_str(), 1); } -- 2.7.4 From 6bf84c120d360b0ee7080c1d9aafadc19bffe2ab Mon Sep 17 00:00:00 2001 From: Changgyu Choi Date: Tue, 1 Aug 2023 13:46:02 +0900 Subject: [PATCH 12/16] Release version 0.36.2 Changes: - Change multiple instance appid key Change-Id: I1fbc64259cd2b8db342d6c1b75be011709d7eb2c Signed-off-by: Changgyu Choi --- packaging/launchpad.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/launchpad.spec b/packaging/launchpad.spec index e1dc46d..e21611d 100644 --- a/packaging/launchpad.spec +++ b/packaging/launchpad.spec @@ -1,6 +1,6 @@ Name: launchpad Summary: Launchpad for launching applications -Version: 0.36.1 +Version: 0.36.2 Release: 1 Group: Application Framework/Daemons License: Apache-2.0 -- 2.7.4 From 2e19fffa4052578b1127951c12caaab007c1a122 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Fri, 11 Aug 2023 12:31:50 +0900 Subject: [PATCH 13/16] Add a missing exception handling The Vconf::Get can throw an exception. This patch adds an exception handling to prevent a crash issue. Change-Id: I96943d2e02b898bf07881d6327f303a923d4a2f7 Signed-off-by: Hwankyu Jhun --- src/launchpad-process-pool/memory_monitor.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/launchpad-process-pool/memory_monitor.cc b/src/launchpad-process-pool/memory_monitor.cc index ee6667f..d92de1f 100644 --- a/src/launchpad-process-pool/memory_monitor.cc +++ b/src/launchpad-process-pool/memory_monitor.cc @@ -63,9 +63,13 @@ void MemoryMonitor::SetEventListener(MemoryMonitor::IEvent* listener) { } bool MemoryMonitor::IsLowMemory() { - if (low_vconf_.Get() >= - Config::GetInst().GetMemoryStatus().GetLowValue()) - return true; + try { + if (low_vconf_.Get() >= + Config::GetInst().GetMemoryStatus().GetLowValue()) + return true; + } catch (const Exception& e) { + _E("Exception occurs. error(%s)", e.what()); + } if (threshold_ == 100) return false; -- 2.7.4 From 72f8ca9f6ff4ee53e382c73bac1eaba6e2c01022 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Fri, 11 Aug 2023 15:26:58 +0900 Subject: [PATCH 14/16] Close all fds while creating process pool After calling fork(), the child process should close all unused file descriptors. Change-Id: I5c0e714dff3bff182fdafbeb1153da5b4e38d0b7 Signed-off-by: Hwankyu Jhun --- src/launchpad-process-pool/launchpad.cc | 1 + src/launchpad-process-pool/loader_manager.cc | 7 +++++++ src/launchpad-process-pool/process_pool.cc | 4 ++++ src/lib/launchpad-glib/util.cc | 10 +++++++++- src/lib/launchpad-glib/util.hh | 3 ++- 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/launchpad-process-pool/launchpad.cc b/src/launchpad-process-pool/launchpad.cc index 69ddf1a..bc51ef5 100644 --- a/src/launchpad-process-pool/launchpad.cc +++ b/src/launchpad-process-pool/launchpad.cc @@ -497,6 +497,7 @@ Launchpad::LaunchResult Launchpad::LaunchRequestPend( if (loader_context->GetPid() > 0) { CPUBoostController::DoBoost(loader_context->GetPid(), CPUBoostController::Level::Strong, 10000); + _W("Send result: %d", loader_context->GetPid()); request->SendResult(loader_context->GetPid()); } diff --git a/src/launchpad-process-pool/loader_manager.cc b/src/launchpad-process-pool/loader_manager.cc index 8e4fc3e..4ddee1c 100644 --- a/src/launchpad-process-pool/loader_manager.cc +++ b/src/launchpad-process-pool/loader_manager.cc @@ -458,6 +458,13 @@ void LoaderManager::OnAppLabelsChanged() { hydra_context->Prepare(); } } else if (context->GetPid() > 0) { + if (context->RefCount() != 0) { + _W("Except. type(%d), loader_name(%s), pid(%d)", + context->GetType(), context->GetLoaderName().c_str(), + context->GetPid()); + continue; + } + context->Dispose(); context->Prepare(); } diff --git a/src/launchpad-process-pool/process_pool.cc b/src/launchpad-process-pool/process_pool.cc index f8c010f..c7bb40f 100644 --- a/src/launchpad-process-pool/process_pool.cc +++ b/src/launchpad-process-pool/process_pool.cc @@ -25,6 +25,8 @@ #include +#include + #include "launchpad-process-pool/launchpad_args.hh" #include "launchpad-process-pool/log_private.hh" @@ -110,6 +112,8 @@ void ProcessPool::OnExecution() { snprintf(args[0], length, "/usr/bin/%s <%s>", kProcessPool, name_.c_str()); close(pipe_fd_[1]); + std::vector except_fds { pipe_fd_[0] }; + Util::CloseAllFds(except_fds); int ret = WaitForRequest(std::make_unique(pipe_fd_[0])); exit(ret); } diff --git a/src/lib/launchpad-glib/util.cc b/src/lib/launchpad-glib/util.cc index 9ab6d9e..f3ac15a 100644 --- a/src/lib/launchpad-glib/util.cc +++ b/src/lib/launchpad-glib/util.cc @@ -26,6 +26,7 @@ #include #include +#include #include #include #include @@ -469,7 +470,7 @@ std::string Util::GetLibDirectory(const std::string& app_path) { return ""; } -void Util::CloseAllFds() { +void Util::CloseAllFds(const std::vector& except_fds) { int aul_fd = -1; const char* aul_listen_fd = getenv("AUL_LISTEN_FD"); if (aul_listen_fd != nullptr) @@ -486,6 +487,13 @@ void Util::CloseAllFds() { if (fd < 3 || fd == aul_fd) continue; + auto found = std::find_if(except_fds.begin(), except_fds.end(), + [&](int except_fd) { + return except_fd == fd; + }); + if (found != except_fds.end()) + continue; + fds.push_back(fd); } } catch (const fs::filesystem_error& e) { diff --git a/src/lib/launchpad-glib/util.hh b/src/lib/launchpad-glib/util.hh index 9dfeaff..013581c 100644 --- a/src/lib/launchpad-glib/util.hh +++ b/src/lib/launchpad-glib/util.hh @@ -21,6 +21,7 @@ #include #include +#include #include #include @@ -41,7 +42,7 @@ class EXPORT_API Util { static int MountResourceDirectories(const AppInfo* app_info); static int WaitTepMount(const AppInfo* app_info); static std::string GetLibDirectory(const std::string& app_path); - static void CloseAllFds(); + static void CloseAllFds(const std::vector& except_fds = {}); static int PrepareAppSocket(); static int PrepareAppIdFile(const AppInfo* app_info); static int SendCmdToAmd(enum AmdCmd cmd); -- 2.7.4 From dfd9ba6d70f04b2eb02f55fe8e9e23d3318caa32 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Fri, 11 Aug 2023 17:09:57 +0900 Subject: [PATCH 15/16] Release version 0.36.3 Changes: - Add a missing exception handling - Close all fds while creating process pool Change-Id: I7af928c124425d35a6e99e8a584c58118f8335ef Signed-off-by: Hwankyu Jhun --- packaging/launchpad.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/launchpad.spec b/packaging/launchpad.spec index e21611d..4b9695a 100644 --- a/packaging/launchpad.spec +++ b/packaging/launchpad.spec @@ -1,6 +1,6 @@ Name: launchpad Summary: Launchpad for launching applications -Version: 0.36.2 +Version: 0.36.3 Release: 1 Group: Application Framework/Daemons License: Apache-2.0 -- 2.7.4 From 26b52de45f868f75561cf5ac394e4722d013e769 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Wed, 16 Aug 2023 13:58:14 +0900 Subject: [PATCH 16/16] Modify CPUBoostingController This patch removes the RESET_ON_FORK flag. If the flag is set, the scheduling policy is not inherited to the sub thread. Change-Id: I8f63106271907749bdabff033881aab619f2e892 Signed-off-by: Hwankyu Jhun --- src/lib/launchpad-common/cpu_boost_controller.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/launchpad-common/cpu_boost_controller.cc b/src/lib/launchpad-common/cpu_boost_controller.cc index 7ef0119..eb06ffe 100644 --- a/src/lib/launchpad-common/cpu_boost_controller.cc +++ b/src/lib/launchpad-common/cpu_boost_controller.cc @@ -33,8 +33,8 @@ void CPUBoostController::DoBoost(pid_t pid, Level level, int timeout_msec) { }; int ret = resource_set_cpu_boosting(res_pid, - static_cast(level), CPU_BOOSTING_RESET_ON_FORK, - timeout_msec); + static_cast(level), + static_cast(0), timeout_msec); if (ret != 0) _E("resource_set_cpu_boosting() is failed. error: %d", ret); else -- 2.7.4