exit app if fail to open plugin library (#449)
author조웅석/Common Platform Lab(SR)/삼성전자 <ws77.cho@samsung.com>
Fri, 2 Dec 2022 05:22:14 +0000 (14:22 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Fri, 2 Dec 2022 05:22:14 +0000 (14:22 +0900)
NativeLauncher/launcher/lib/core_runtime.cc
NativeLauncher/util/plugin_manager.cc

index b56a4c2..5f1be89 100644 (file)
@@ -336,6 +336,7 @@ int CoreRuntime::initialize(const char* appType, LaunchMode launchMode)
        // So, plugin initialize should be called before creating threads.
        if (initializePluginManager(appType) < 0) {
                _ERR("Failed to initialize PluginManager");
+               return -1;
        }
 
        // checkInjection checks dotnet-launcher run mode
index 0e38f4e..4fcd787 100644 (file)
@@ -33,34 +33,38 @@ int initializePluginManager(const char* appType)
 
        if (isFile(PLUGIN_PATH)) {
                __pluginLib = dlopen(PLUGIN_PATH, RTLD_NOW | RTLD_LOCAL | RTLD_NODELETE);
-               if (__pluginLib) {
-                       __pluginFunc = (PluginFunc*)calloc(sizeof(PluginFunc), 1);
-                       if (!__pluginFunc) {
-                               _ERR("fail to allocate memory for plugin function structure");
-                               dlclose(__pluginLib);
-                               __pluginLib = NULL;
-                               return -1;
-                       }
-                       __pluginFunc->initialize = (plugin_initialize_ptr)dlsym(__pluginLib, "plugin_initialize");
-                       __pluginFunc->preload = (plugin_preload_ptr)dlsym(__pluginLib, "plugin_preload");
-                       __pluginFunc->has_log_control = (plugin_has_log_control_ptr)dlsym(__pluginLib, "plugin_has_log_control");
-                       __pluginFunc->set_app_info = (plugin_set_app_info_ptr)dlsym(__pluginLib, "plugin_set_app_info");
-                       __pluginFunc->set_coreclr_info = (plugin_set_coreclr_info_ptr)dlsym(__pluginLib, "plugin_set_coreclr_info");
-                       __pluginFunc->get_dll_path = (plugin_get_dll_path_ptr)dlsym(__pluginLib, "plugin_get_dll_path");
-                       __pluginFunc->get_extra_dll_path = (plugin_get_extra_dll_path_ptr)dlsym(__pluginLib, "plugin_get_extra_dll_path");
-                       __pluginFunc->get_native_dll_searching_path = (plugin_get_native_dll_searching_path_ptr)dlsym(__pluginLib, "plugin_get_native_dll_searching_path");
-                       __pluginFunc->get_tpa = (plugin_get_tpa_ptr)dlsym(__pluginLib, "plugin_get_tpa");
-                       __pluginFunc->before_execute = (plugin_before_execute_ptr)dlsym(__pluginLib, "plugin_before_execute");
-                       __pluginFunc->finalize  = (plugin_finalize_ptr)dlsym(__pluginLib, "plugin_finalize");
+               if (!__pluginLib) {
+                       _ERR("fail to dlopen plugin library");
+                       return -1;
                }
 
-               if (__pluginFunc->initialize)
-                       __pluginFunc->initialize(appType);
+               __pluginFunc = (PluginFunc*)calloc(sizeof(PluginFunc), 1);
+               if (!__pluginFunc) {
+                       _ERR("fail to allocate memory for plugin function structure");
+                       dlclose(__pluginLib);
+                       __pluginLib = NULL;
+                       return -1;
+               }
+               __pluginFunc->initialize = (plugin_initialize_ptr)dlsym(__pluginLib, "plugin_initialize");
+               __pluginFunc->preload = (plugin_preload_ptr)dlsym(__pluginLib, "plugin_preload");
+               __pluginFunc->has_log_control = (plugin_has_log_control_ptr)dlsym(__pluginLib, "plugin_has_log_control");
+               __pluginFunc->set_app_info = (plugin_set_app_info_ptr)dlsym(__pluginLib, "plugin_set_app_info");
+               __pluginFunc->set_coreclr_info = (plugin_set_coreclr_info_ptr)dlsym(__pluginLib, "plugin_set_coreclr_info");
+               __pluginFunc->get_dll_path = (plugin_get_dll_path_ptr)dlsym(__pluginLib, "plugin_get_dll_path");
+               __pluginFunc->get_extra_dll_path = (plugin_get_extra_dll_path_ptr)dlsym(__pluginLib, "plugin_get_extra_dll_path");
+               __pluginFunc->get_native_dll_searching_path = (plugin_get_native_dll_searching_path_ptr)dlsym(__pluginLib, "plugin_get_native_dll_searching_path");
+               __pluginFunc->get_tpa = (plugin_get_tpa_ptr)dlsym(__pluginLib, "plugin_get_tpa");
+               __pluginFunc->before_execute = (plugin_before_execute_ptr)dlsym(__pluginLib, "plugin_before_execute");
+               __pluginFunc->finalize  = (plugin_finalize_ptr)dlsym(__pluginLib, "plugin_finalize");
        }
 
-       _INFO("Plugin manager initialize success : appType(%s)", appType);
+       if (__pluginFunc && __pluginFunc->initialize)
+               __pluginFunc->initialize(appType);
 
        initializedPluginManager = true;
+
+       _INFO("Plugin manager initialize success : appType(%s)", appType);
+
        return 0;
 }