bool CServiceManager::incomingLoad(const Service::Uid & service) { LOG4CPLUS_TRACE_METHOD(msLogger, __PRETTY_FUNCTION__); mSystemServicesMutex.lock(); tServiceSet::const_iterator it = mSystemServices.find(service); if (mSystemServices.end() == it) { LOG4CPLUS_ERROR( msLogger, "incomingLoad(" + service.value() + "): failed to find service"); mSystemServicesMutex.unlock(); return false; } mSystemServicesMutex.unlock(); if(isServiceAlreadyLoaded(service)) { return true; } CService * pService = new CService(mXmlPath, mAppInfo, service); mCallbacksMutex.lock(); if (!pService->incomingLoad(mCallbacks)) { mCallbacksMutex.unlock(); delete pService; LOG4CPLUS_ERROR( msLogger, "pService->incomingLoad(" + service.value() + ") return false"); return false; } mCallbacksMutex.unlock(); mActiveServicesMutex.lock(); mActiveServices[service] = pService; mActiveServicesMutex.unlock(); return true; }