diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2014-10-09 09:33:51 -0230 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2014-10-09 09:33:51 -0230 |
commit | 0dddde38961725640408aa587ae266303bdb1266 (patch) | |
tree | 9fc6d4694ffb90f3e776ca7f71c290eeca199860 /cpp/src/Ice/Instance.cpp | |
parent | Fix Windows dependencies, break by previous dependencies update (diff) | |
download | ice-0dddde38961725640408aa587ae266303bdb1266.tar.bz2 ice-0dddde38961725640408aa587ae266303bdb1266.tar.xz ice-0dddde38961725640408aa587ae266303bdb1266.zip |
ICE-5615 move PluginManager destruction outside of sync at end of Instance::destroy
Diffstat (limited to 'cpp/src/Ice/Instance.cpp')
-rw-r--r-- | cpp/src/Ice/Instance.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/cpp/src/Ice/Instance.cpp b/cpp/src/Ice/Instance.cpp index db5265ac0db..a14a07f16c4 100644 --- a/cpp/src/Ice/Instance.cpp +++ b/cpp/src/Ice/Instance.cpp @@ -1676,6 +1676,7 @@ IceInternal::Instance::destroy() ThreadPoolPtr clientThreadPool; EndpointHostResolverPtr endpointHostResolver; TimerPtr timer; + PluginManagerPtr pluginManager; bool checkUnused = false; { IceUtil::RecMutex::Lock sync(*this); @@ -1695,6 +1696,7 @@ IceInternal::Instance::destroy() _clientThreadPool->destroy(); std::swap(_clientThreadPool, clientThreadPool); } + if(_endpointHostResolver) { _endpointHostResolver->destroy(); @@ -1736,11 +1738,7 @@ IceInternal::Instance::destroy() _endpointFactoryManager = 0; } - if(_pluginManager) - { - _pluginManager->destroy(); - _pluginManager = 0; - } + std::swap(_pluginManager, pluginManager); // No destroy function defined. // _dynamicLibraryList->destroy(); @@ -1791,6 +1789,14 @@ IceInternal::Instance::destroy() } } } + + // + // Destroy last so that a Logger plugin can receive all log/traces before its destruction. + // + if(pluginManager) + { + pluginManager->destroy(); + } } void |