Mount gadget resource paths for NUIGadget
[platform/core/appfw/launchpad.git] / src / launchpad-process-pool / loader_manager.cc
index 472d556..7632d39 100644 (file)
@@ -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;