version 1.3, 2004/05/26 17:24:47
|
version 1.5, 2004/06/04 02:23:58
|
|
|
CIMInstance providerModule; | CIMInstance providerModule; |
| |
if ((dynamic_cast<CIMOperationRequestMessage*>(request) != 0) || | if ((dynamic_cast<CIMOperationRequestMessage*>(request) != 0) || |
(request->getType() == CIM_EXPORT_INDICATION_REQUEST_MESSAGE)) |
(request->getType() == CIM_EXPORT_INDICATION_REQUEST_MESSAGE) || |
|
(request->getType() == CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE)) |
{ | { |
// Provider information is in OperationContext | // Provider information is in OperationContext |
ProviderIdContainer pidc = (ProviderIdContainer) | ProviderIdContainer pidc = (ProviderIdContainer) |
|
|
{ | { |
// This operation is not provider-specific | // This operation is not provider-specific |
} | } |
else if (dynamic_cast<CIMInitializeProviderRequestMessage*>(request) != 0) |
|
{ |
|
// Provider information is in CIMInitializeProviderRequestMessage |
|
CIMInitializeProviderRequestMessage* initReq = |
|
dynamic_cast<CIMInitializeProviderRequestMessage*>(request); |
|
providerModule = initReq->providerModule; |
|
} |
|
else | else |
{ | { |
// Error: Unrecognized message type. | // Error: Unrecognized message type. |
|
|
if (request->getType() == CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE) | if (request->getType() == CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE) |
{ | { |
// Send CIMStopAllProvidersRequestMessage to all ProviderManagers | // Send CIMStopAllProvidersRequestMessage to all ProviderManagers |
|
ReadLock tableLock(_providerManagerTableLock); |
for (Uint32 i = 0, n = _providerManagerTable.size(); i < n; i++) | for (Uint32 i = 0, n = _providerManagerTable.size(); i < n; i++) |
{ | { |
ProviderManagerContainer* pmc=_providerManagerTable[i]; | ProviderManagerContainer* pmc=_providerManagerTable[i]; |
|
|
return 0; | return 0; |
} | } |
| |
void BasicProviderManagerRouter::unload_idle_providers(void) |
Boolean BasicProviderManagerRouter::hasActiveProviders() |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, | PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
"BasicProviderManagerRouter::unload_idle_providers"); |
"BasicProviderManagerRouter::hasActiveProviders"); |
| |
|
ReadLock tableLock(_providerManagerTableLock); |
for(Uint32 i = 0, n = _providerManagerTable.size(); i < n; i++) | for(Uint32 i = 0, n = _providerManagerTable.size(); i < n; i++) |
{ | { |
ProviderManagerContainer* pmc = _providerManagerTable[i]; | ProviderManagerContainer* pmc = _providerManagerTable[i]; |
pmc->getProviderManager()->unload_idle_providers(); |
if (pmc->getProviderManager()->hasActiveProviders()) |
|
{ |
|
PEG_METHOD_EXIT(); |
|
return true; |
|
} |
|
} |
|
|
|
PEG_METHOD_EXIT(); |
|
return false; |
|
} |
|
|
|
void BasicProviderManagerRouter::unloadIdleProviders() |
|
{ |
|
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
|
"BasicProviderManagerRouter::unloadIdleProviders"); |
|
|
|
// |
|
// Save pointers to the ProviderManagerContainers so we don't hold the |
|
// _providerManagerTableLock while unloading idle providers |
|
// |
|
Array<ProviderManagerContainer*> pmcs; |
|
{ |
|
ReadLock tableLock(_providerManagerTableLock); |
|
for(Uint32 i = 0, n = _providerManagerTable.size(); i < n; i++) |
|
{ |
|
pmcs.append(_providerManagerTable[i]); |
|
} |
|
} |
|
|
|
// |
|
// Unload idle providers in each of the active ProviderManagers |
|
// _providerManagerTableLock while unloading idle providers |
|
// |
|
for (Uint32 i = 0; i < pmcs.size(); i++) |
|
{ |
|
pmcs[i]->getProviderManager()->unloadIdleProviders(); |
} | } |
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |