Error CServiceManager::load(const Service::Uid & service) { LOG4CPLUS_TRACE_METHOD(msLogger, __PRETTY_FUNCTION__); mSystemServicesMutex.lock(); tServiceSet::const_iterator it = mSystemServices.find(service); if (mSystemServices.end() == it) { mSystemServicesMutex.unlock(); LOG4CPLUS_ERROR(msLogger, "hasn't found the requested service"); return Error(SERVICE_NOT_FOUND, "The service requested: " + service.value() + " was not found among system services, please check that it is present in " + mXmlPath, false); } mSystemServicesMutex.unlock(); mActiveServicesMutex.lock(); tServiceMap::const_iterator sit = mActiveServices.find(service); if (mActiveServices.end() != sit) { mActiveServicesMutex.unlock(); LOG4CPLUS_ERROR(msLogger, "The requested service is among active!"); return Error(SERVICE_ALREADY_LOADED, "The service requested: " + service.value() + " is already loaded!", false); } mActiveServicesMutex.unlock(); CService * pService = new CService(mXmlPath, mAppInfo, service); mCallbacksMutex.lock(); Error cserviceError = pService->load(mCallbacks); if (!cserviceError.isNoError()) { mCallbacksMutex.unlock(); LOG4CPLUS_ERROR(msLogger, "CService couldn't load the service: " + cserviceError.toString()); delete pService; return cserviceError; } mCallbacksMutex.unlock(); mActiveServicesMutex.lock(); mActiveServices[service] = pService; mActiveServicesMutex.unlock(); LOG4CPLUS_TRACE(msLogger, "Loaded a service successfully"); return Error::NoError(); }