bool CServiceManager::unload(const Service::Uid &service) { LOG4CPLUS_TRACE_METHOD(msLogger, __PRETTY_FUNCTION__); mActiveServicesMutex.lock(); tServiceMap::iterator it = mActiveServices.find(service); if (mActiveServices.end() == it) { mActiveServicesMutex.unlock(); return false; } CService * pService = it->second; pService->unload(); if (!pService->hasUnloadWaits()) { mActiveServices.erase(it); delete pService; } mActiveServicesMutex.unlock(); return true; }
void CServiceManager::releaseProfile(const Service::Uid &service, const Profile::ApiUid &profileApi) { LOG4CPLUS_TRACE_METHOD(msLogger, __PRETTY_FUNCTION__); mActiveServicesMutex.lock(); tServiceMap::iterator it = mActiveServices.find(service); if (mActiveServices.end() != it) { it->second->releaseProfile(profileApi); if (it->second->allDied()) { CService * pService = it->second; pService->unload(); if (!pService->hasUnloadWaits()) { mActiveServices.erase(it); delete pService; } } } mActiveServicesMutex.unlock(); }