summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Instance.cpp
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2014-10-09 09:33:51 -0230
committerDwayne Boone <dwayne@zeroc.com>2014-10-09 09:33:51 -0230
commit0dddde38961725640408aa587ae266303bdb1266 (patch)
tree9fc6d4694ffb90f3e776ca7f71c290eeca199860 /cpp/src/Ice/Instance.cpp
parentFix Windows dependencies, break by previous dependencies update (diff)
downloadice-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.cpp16
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