call pluginFinalize before coreclr shutdown and unload libplugin.so after coreclr... 94/193994/1 accepted/tizen/5.0/unified/20181128.074025 submit/tizen_5.0/20181128.061753
authorWoongsuk Cho <ws77.cho@samsung.com>
Wed, 28 Nov 2018 06:13:02 +0000 (15:13 +0900)
committerWoongsuk Cho <ws77.cho@samsung.com>
Wed, 28 Nov 2018 06:13:02 +0000 (15:13 +0900)
Change-Id: I79a716816a3397457d4f87499270b6e448154196

NativeLauncher/inc/plugin_manager.h
NativeLauncher/launcher/dotnet/dotnet_launcher.cc
NativeLauncher/util/plugin_manager.cc

index f029750..534e0f8 100644 (file)
@@ -51,6 +51,7 @@ void pluginSetAppInfo(const char* appId, const char* managedAssemblyPath);
 void pluginSetCoreclrInfo(void* hostHandle, unsigned int domainId, coreclr_create_delegate_ptr delegateFunc);
 char* pluginGetDllPath();
 void pluginBeforeExecute();
+void pluginFinalize();
 
 // initialize / finalize plugin manager
 int initializePluginManager(const char* mode);
index 7cd16b9..b0f78c5 100644 (file)
@@ -410,8 +410,9 @@ bool CoreRuntime::initializeCoreClr(const char* appId,
 
 void CoreRuntime::dispose()
 {
-       // call finalize plugin callback before shutdown coreclr
-       finalizePluginManager();
+       // call plugin finalize function to notify finalize to plugin
+       // dlclose shoud be done after coreclr shutdown to avoid breaking signal chain
+       pluginFinalize();
 
        // ignore the signal generated by an exception that occurred during shutdown
        checkOnTerminate = true;
@@ -431,6 +432,7 @@ void CoreRuntime::dispose()
                __coreclrLib = nullptr;
        }
 
+       finalizePluginManager();
        finalizePathManager();
 
        __envList.clear();
index 227e0a2..44b401d 100644 (file)
@@ -55,10 +55,8 @@ int initializePluginManager(const char* mode)
 
 void finalizePluginManager()
 {
+       _INFO("Plugin manager finalize called");
        if (__pluginFunc) {
-               if (__pluginFunc->finalize) {
-                       __pluginFunc->finalize();
-               }
                free(__pluginFunc);
                __pluginFunc = NULL;
        }
@@ -115,3 +113,10 @@ void pluginBeforeExecute()
        }
 }
 
+void pluginFinalize()
+{
+       if (__pluginFunc && __pluginFunc->finalize) {
+               __pluginFunc->finalize();
+       }
+}
+