Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
      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();
      }