diff options
Diffstat (limited to 'src/launchpad-process-pool/loader_manager.cc')
-rw-r--r-- | src/launchpad-process-pool/loader_manager.cc | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/launchpad-process-pool/loader_manager.cc b/src/launchpad-process-pool/loader_manager.cc index 472d556..7632d39 100644 --- a/src/launchpad-process-pool/loader_manager.cc +++ b/src/launchpad-process-pool/loader_manager.cc @@ -43,6 +43,7 @@ void LoaderManager::Dispose() { if (disposed_) return; + loader_mount_.reset(); hwacc_config_.reset(); app_defined_loader_info_manager_.reset(); loader_info_manager_.reset(); @@ -65,6 +66,11 @@ void LoaderManager::Init() { app_defined_loader_info_manager_.reset(new AppDefinedLoaderInfoManager()); app_defined_loader_info_manager_->SetEventListener(this); hwacc_config_.reset(new HWAccelerationConfig()); + + if (!label_monitor.IsDisposed()) { + setenv("LOADER_MOUNT", "1", 1); + loader_mount_.reset(new LoaderMount()); + } } catch (const Exception& e) { _E("Exception occurs. error: %s", e.what()); return; @@ -73,6 +79,12 @@ void LoaderManager::Init() { disposed_ = false; } +void LoaderManager::PrepareApp(const std::shared_ptr<LoaderContext>& context, + const AppInfo* app_info) { + pid_t pid = context->GetPid(); + loader_mount_->Mount(pid, app_info); +} + void LoaderManager::SetEventListener(LoaderManager::IEvent* event_listener) { event_listener_ = event_listener; } @@ -94,6 +106,7 @@ void LoaderManager::HandleSigchld(pid_t pid) { RemoveLoaderContextsByCallerPid(pid); LoaderExecutor::GetInst().HandleSigchld(pid); + if (loader_mount_) loader_mount_->HandleSigchld(pid); } void LoaderManager::AddDefaultLoaderContexts() { @@ -101,7 +114,8 @@ void LoaderManager::AddDefaultLoaderContexts() { loader_info_manager_->Load(); for (auto& info : loader_info_manager_->GetLoaderInfoList()) { - auto context = LoaderFactory::GetInst().CreateLoaderContext(info); + auto context = + LoaderFactory::GetInst().CreateLoaderContext(info, loader_mount_); if (context != nullptr) { context->SetEventListener(this); loader_contexts_.push_back(std::move(context)); @@ -148,7 +162,8 @@ std::shared_ptr<LoaderContext> LoaderManager::PrepareAppDefinedLoaderContext( auto context = FindLoaderContextFromName(name); if (context == nullptr) { - context = LoaderFactory::GetInst().CreateLoaderContext(info, caller_pid); + context = LoaderFactory::GetInst().CreateLoaderContext(info, caller_pid, + loader_mount_); if (context == nullptr) { _E("Failed to create loader context. loader_name: %s", name.c_str()); @@ -166,7 +181,8 @@ std::shared_ptr<LoaderContext> LoaderManager::PrepareAppDefinedLoaderContext( std::shared_ptr<LoaderContext> LoaderManager::AddLoaderContext( tizen_base::Bundle b) { - auto context = LoaderFactory::GetInst().CreateLoaderContext(std::move(b)); + auto context = + LoaderFactory::GetInst().CreateLoaderContext(std::move(b), loader_mount_); if (context == nullptr) return nullptr; |