Support hydra mode
[platform/core/dotnet/launcher.git] / NativeLauncher / launcher / launcher.cc
index e5a1f14..14a7d18 100644 (file)
@@ -57,6 +57,7 @@ class LaunchpadAdapterImpl : public LaunchpadAdapter
        private:
                AppInfo appInfo;
                loader_lifecycle_callback_s callbacks;
+               hydra_lifecycle_callback_s hydraCallbacks;
                loader_adapter_s adapter;
                bool __isLaunched;
                std::string __launchPath;
@@ -90,7 +91,7 @@ static Eina_Bool fdHandler(void *data, Ecore_Fd_Handler* handler)
                }
        }
 
-       return ECORE_CALLBACK_CANCEL;
+       return ECORE_CALLBACK_RENEW;
 }
 
 static void fdAdd(void *data, int fd, loader_receiver_cb receiver)
@@ -214,6 +215,28 @@ int LaunchpadAdapterImpl::loaderMain(int argc, char* argv[])
                return 0;
        };
 
+       // Called before initial fork
+       hydraCallbacks.precreate = [](void* userData) {
+               WITH_SELF(userData) {
+                       if (self->onPreCreate != nullptr)
+                               self->onPreCreate();
+               }
+       };
+
+       hydraCallbacks.create = [](void* userData) {
+               ecore_init();
+       };
+
+       // Called after fork in candidate
+       hydraCallbacks.fork = [](void *userData) {
+               ecore_fork_reset();
+       };
+
+       hydraCallbacks.terminate = [](void* userData) {
+               ecore_shutdown();
+               return 0;
+       };
+
        adapter.loop_begin = [](void *data) {
                ecore_main_loop_begin();
        };
@@ -224,9 +247,10 @@ int LaunchpadAdapterImpl::loaderMain(int argc, char* argv[])
        adapter.add_fd = fdAdd;
        adapter.remove_fd = fdRemove;
 
-       _INFO("launchpad_loader_main is start");
-       int r = launchpad_loader_main(argc, argv, &(this->callbacks), &(this->adapter), this);
-       _INFO("launchpad_loader_main is finished with [%d]", r);
+       _INFO("launchpad_hydra_main is start");
+       int r = launchpad_hydra_main(argc, argv, &(this->hydraCallbacks),
+               &(this->callbacks), &(this->adapter), this);
+       _INFO("launchpad_hydra_main is finished with [%d]", r);
 
        return r;
 }