Revert PR #509, #510 (#513)
[platform/core/dotnet/launcher.git] / NativeLauncher / launcher / lib / core_runtime.cc
index fcbf7ea..ba874aa 100644 (file)
@@ -35,9 +35,9 @@
 #include <linux/limits.h>
 #include <pthread.h>
 
-#include <storage.h>
 #include <vconf.h>
 #include <app_common.h>
+#include <tzplatform_config.h>
 
 #include <Ecore.h>
 
@@ -143,50 +143,28 @@ static void registerSigHandler()
        }
 }
 
-static bool storage_cb(int id, storage_type_e type, storage_state_e state, const char *path, void *user_data)
-{
-       int* tmp = (int*)user_data;
-       if (type == STORAGE_TYPE_INTERNAL)
-       {
-               *tmp = id;
-               return false;
-       }
-
-       return true;
-}
-
-static void setSpecialFolder(storage_directory_e type, const char* key)
-{
-       int error;
-       char* path = NULL;
-       static int __storageId = -1;
-
-       if (__storageId < 0) {
-               error = storage_foreach_device_supported(storage_cb, &__storageId);
-               if (error != STORAGE_ERROR_NONE) {
-                       return;
-               }
-       }
-
-       error = storage_get_directory(__storageId, type, &path);
-       if (error == STORAGE_ERROR_NONE && path != NULL) {
-               setenv(key, const_cast<char *>(path), 1);
-               free(path);
-       }
-}
-
 static void initEnvForSpecialFolder()
 {
+       const char* path = NULL;
        if (getenv("XDG_PICTURES_DIR") == NULL) {
-               setSpecialFolder(STORAGE_DIRECTORY_IMAGES, "XDG_PICTURES_DIR");
+               path = tzplatform_getenv(TZ_USER_IMAGES);
+               if (path) {
+                       setenv("XDG_PICTURES_DIR", path, 1);
+               }
        }
 
        if (getenv("XDG_MUSIC_DIR") == NULL) {
-               setSpecialFolder(STORAGE_DIRECTORY_MUSIC, "XDG_MUSIC_DIR");
+               path = tzplatform_getenv(TZ_USER_MUSIC);
+               if (path) {
+                       setenv("XDG_MUSIC_DIR", path, 1);
+               }
        }
 
        if (getenv("XDG_VIDEOS_DIR") == NULL) {
-               setSpecialFolder(STORAGE_DIRECTORY_VIDEOS, "XDG_VIDEOS_DIR");
+               path = tzplatform_getenv(TZ_USER_VIDEOS);
+               if (path) {
+                       setenv("XDG_VIDEOS_DIR", path, 1);
+               }
        }
 }
 
@@ -271,29 +249,6 @@ void preload()
        pluginPreload();
 }
 
-static pthread_t coreclrPreloadThreadId = 0;
-static void* coreclrPreloadThread(void* arg)
-{
-       _INFO("CoreclrPreloadThread START\n");
-       typedef void (*CoreclrPreloadDelegate)();
-       CoreclrPreloadDelegate coreclrPreloadDelegate;
-
-       int ret = createDelegate(__hostHandle,
-               __domainId,
-               "Tizen.Runtime",
-               "Tizen.Runtime.Preloader",
-               "CoreclrPreload",
-               (void**)&coreclrPreloadDelegate);
-
-       if (ret < 0) {
-               _ERR("Failed to create delegate for Tizen.Runtime CoreclrPreload (0x%08x)", ret);
-       } else {
-               coreclrPreloadDelegate();
-       }
-       _INFO("CoreclrPreloadThread END\n");
-       pthread_exit(NULL);
-}
-
 bool initializeCoreClr(PathManager* pm, const std::string& tpa)
 {
        bool ncdbStartupHook = isNCDBStartupHookProvided();
@@ -344,9 +299,6 @@ int CoreRuntime::initialize(const char* appType, LaunchMode launchMode)
                return -1;
        }
 
-       // Intiailize ecore first (signal handlers, etc.) before runtime init.
-       ecore_init();
-
        // set language environment to support ICU
        setLang();
 
@@ -402,6 +354,9 @@ int CoreRuntime::initialize(const char* appType, LaunchMode launchMode)
        // Disable config cache to set environment after coreclr_initialize()
        putenv(const_cast<char *>("COMPlus_DisableConfigCache=1"));
 
+       // Set environment variable for System.Environment.SpecialFolder
+       initEnvForSpecialFolder();
+
        // read string from external file and set them to environment value.
        setEnvFromFile();
 
@@ -427,8 +382,6 @@ int CoreRuntime::initialize(const char* appType, LaunchMode launchMode)
                __pm->setExtraDllPaths(pluginExtraDllPaths);
        }
 
-       pluginHasLogControl();
-
        std::string libCoreclr(concatPath(__pm->getRuntimePath(), "libcoreclr.so"));
 
        __coreclrLib = dlopen(libCoreclr.c_str(), RTLD_NOW | RTLD_LOCAL);
@@ -456,12 +409,6 @@ int CoreRuntime::initialize(const char* appType, LaunchMode launchMode)
 
        _INFO("libcoreclr dlopen and dlsym success");
 
-       // Set environment for System.Environment.SpecialFolder
-       // Below function creates dbus connection by callging storage API.
-       // If dbus connection is created bofere fork(), forked process cannot use dbus.
-       // To avoid gdbus blocking issue, below function should be called after fork()
-       initEnvForSpecialFolder();
-
        std::string tpa;
        char* pluginTPA = pluginGetTPA();
        if (pluginTPA && pluginTPA[0] != '\0') {
@@ -475,6 +422,11 @@ int CoreRuntime::initialize(const char* appType, LaunchMode launchMode)
                return -1;
        }
 
+       // VD has their own signal handler.
+       if (!pluginHasLogControl()) {
+               registerSigHandler();
+       }
+
        int st = createDelegate(__hostHandle, __domainId, "Tizen.Runtime", "Tizen.Runtime.Environment", "SetEnvironmentVariable", (void**)&setEnvironmentVariable);
        if (st < 0 || setEnvironmentVariable == nullptr) {
                _ERR("Create delegate for Tizen.Runtime.dll -> Tizen.Runtime.Environment -> SetEnvironmentVariable failed (0x%08x)", st);
@@ -493,12 +445,6 @@ int CoreRuntime::initialize(const char* appType, LaunchMode launchMode)
                return -1;
        }
 
-       //Preload and execute long-duration jobs
-       int err = pthread_create(&coreclrPreloadThreadId, NULL, coreclrPreloadThread, NULL);
-       if (err) {
-               _ERR("CoreclrPreloadThread Creation Failed: %s", strerror(err));
-       }
-
        if (launchMode == LaunchMode::loader) {
                // preload libraries and manage dlls for optimizing startup time
                preload();
@@ -577,11 +523,6 @@ int CoreRuntime::launch(const char* appId, const char* root, const char* path, i
                return -1;
        }
 
-       // VD has their own signal handler.
-       if (!pluginHasLogControl()) {
-               registerSigHandler();
-       }
-
        pluginSetAppInfo(appId, path);
 
        // temporal root path is overrided to real application root path