summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authora.dunfey <a.dunfey>2005-08-16 18:58:05 +0000
committera.dunfey <a.dunfey>2005-08-16 18:58:05 +0000
commit00e63af470ba6a65225bc55d01186fb0c3015762 (patch)
tree5ec4ef5c38bf2d6874b03f399074929ea089bab1 /src
parent1e30ba23a5065fed0448f49f22d45585e3f4d5ef (diff)
downloadtog-pegasus-00e63af470ba6a65225bc55d01186fb0c3015762.zip
tog-pegasus-00e63af470ba6a65225bc55d01186fb0c3015762.tar.gz
tog-pegasus-00e63af470ba6a65225bc55d01186fb0c3015762.tar.xz
BUG#: 3669
TITLE: Failure in poststarttests when forceProviderProcesses=true DESCRIPTION: Moved the deletion of a provider's CIMOMHandle until after the provider module is unloaded.
Diffstat (limited to 'src')
-rw-r--r--src/Pegasus/ProviderManager2/Default/LocalProviderManager.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/Pegasus/ProviderManager2/Default/LocalProviderManager.cpp b/src/Pegasus/ProviderManager2/Default/LocalProviderManager.cpp
index 4e7dd78..7d843b0 100644
--- a/src/Pegasus/ProviderManager2/Default/LocalProviderManager.cpp
+++ b/src/Pegasus/ProviderManager2/Default/LocalProviderManager.cpp
@@ -574,16 +574,26 @@ void LocalProviderManager::_unloadProvider(Provider* provider)
"Error occured terminating provider " + provider->_name);
}
- // delete the cimom handle
- PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
- "Destroying Provider's CIMOM Handle " + provider->_name);
- delete provider->_cimom_handle;
-
PEGASUS_ASSERT(provider->_module != 0);
// unload provider module
provider->_module->unloadModule();
+ // NOTE: The "delete provider->_cimom_handle" operation was
+ // moved to be called after the unloadModule() call above
+ // as part of a fix for bugzilla 3669. For some providers
+ // run out-of-process on Windows platforms (i.e. running
+ // the cimserver with the forceProviderProcesses config option
+ // set to "true"), deleting the provider's CIMOMHandle before
+ // unloading the provider library caused the unload mechanism
+ // to deadlock, making that provider unavailable and preventing
+ // the cimserver from shutting down. It should NOT be moved back
+ // above the unloadModule() call. See bugzilla 3669 for details.
+ // delete the cimom handle
+ PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
+ "Destroying Provider's CIMOM Handle " + provider->_name);
+ delete provider->_cimom_handle;
+
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
"ProviderManager::_provider_crtl - Unload provider $0",
provider->getName());