summaryrefslogtreecommitdiff
path: root/src/launchpad-process-pool/loader_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/launchpad-process-pool/loader_manager.cc')
-rw-r--r--src/launchpad-process-pool/loader_manager.cc22
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;