Changeset 2693


Ignore:
Timestamp:
12/16/24 10:00:44 (7 weeks ago)
Author:
jderouillat
Message:

When 2 levels servers are used, instanciate first writer, then gatherers. It avoids a deadlock situation in the case of services managed through a notification manager embedded on a server.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS3/trunk/src/server.cpp

    r2687 r2693  
    262262              } 
    263263            else ressourcesManager->waitPoolRegistration(CXios::defaultPoolId) ; 
    264  
    265             servicesManager->createServices(CXios::defaultPoolId,  CXios::defaultGathererId, CServicesManager::GATHERER, nprocsGatherer, 1) ; 
    266             if (CThreadManager::isUsingThreads())  
    267               while(!servicesManager->hasService(CXios::defaultPoolId, CXios::defaultGathererId,0))  
    268               { 
    269                 daemonsManager->eventLoop() ; 
    270                 CThreadManager::yield() ; 
    271               } 
    272             else servicesManager->waitServiceRegistration(CXios::defaultPoolId, CXios::defaultGathererId) ; 
    273  
    274             servicesManager->createServicesOnto(CXios::defaultPoolId, CXios::defaultReaderId, CServicesManager::READER, CXios::defaultGathererId) ; 
    275             if (CThreadManager::isUsingThreads())  
    276               while(!servicesManager->hasService(CXios::defaultPoolId, CXios::defaultReaderId, 0))  
    277               { 
    278                 daemonsManager->eventLoop() ; 
    279                 CThreadManager::yield() ; 
    280               } 
    281             else servicesManager->waitServiceRegistration(CXios::defaultPoolId, CXios::defaultReaderId) ; 
    282264             
    283265            servicesManager->createServices(CXios::defaultPoolId,  CXios::defaultWriterId, CServicesManager::WRITER, nprocsServer, nbPoolsServer2) ; 
     
    290272                } 
    291273            else servicesManager->waitServiceRegistration(CXios::defaultPoolId, CXios::defaultWriterId) ; 
     274 
     275            servicesManager->createServices(CXios::defaultPoolId,  CXios::defaultGathererId, CServicesManager::GATHERER, nprocsGatherer, 1) ; 
     276            if (CThreadManager::isUsingThreads())  
     277              while(!servicesManager->hasService(CXios::defaultPoolId, CXios::defaultGathererId,0))  
     278              { 
     279                daemonsManager->eventLoop() ; 
     280                CThreadManager::yield() ; 
     281              } 
     282            else servicesManager->waitServiceRegistration(CXios::defaultPoolId, CXios::defaultGathererId) ; 
     283 
     284            servicesManager->createServicesOnto(CXios::defaultPoolId, CXios::defaultReaderId, CServicesManager::READER, CXios::defaultGathererId) ; 
     285            if (CThreadManager::isUsingThreads())  
     286              while(!servicesManager->hasService(CXios::defaultPoolId, CXios::defaultReaderId, 0))  
     287              { 
     288                daemonsManager->eventLoop() ; 
     289                CThreadManager::yield() ; 
     290              } 
     291            else servicesManager->waitServiceRegistration(CXios::defaultPoolId, CXios::defaultReaderId) ; 
    292292          } 
    293293        } 
Note: See TracChangeset for help on using the changeset viewer.