Ignore:
Timestamp:
07/27/17 19:09:24 (7 years ago)
Author:
oabramkina
Message:

Resolving a deadlock introduced in r1225.

Location:
XIOS/dev/XIOS_DEV_CMIP6/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/XIOS_DEV_CMIP6/src/context_server.cpp

    r1225 r1228  
    8686    { 
    8787      rank=status.MPI_SOURCE ; 
    88  
    89       if (pendingRequest.find(rank)==pendingRequest.end()) listenPendingRequest(status) ; 
    90       else 
     88      bool okLoop; 
     89      if (pendingRequest.find(rank)==pendingRequest.end()) 
     90        okLoop = !listenPendingRequest(status) ; 
     91      if (okLoop) 
    9192      { 
    9293        for(rank=0;rank<commSize;rank++) 
     
    105106  } 
    106107 
    107   void CContextServer::listenPendingRequest(MPI_Status& status) 
     108  bool CContextServer::listenPendingRequest(MPI_Status& status) 
    108109  { 
    109110    int count; 
     
    119120       mapBufferSize_.insert(std::make_pair(rank, buffSize)); 
    120121       it=(buffers.insert(pair<int,CServerBuffer*>(rank,new CServerBuffer(buffSize)))).first; 
     122       return true; 
    121123    } 
    122124    else 
     
    128130         MPI_Irecv(addr,count,MPI_CHAR,rank,20,interComm,&pendingRequest[rank]); 
    129131         bufferRequest[rank]=addr; 
     132         return true; 
    130133       } 
     134      else 
     135        return false; 
    131136    } 
    132137  } 
  • XIOS/dev/XIOS_DEV_CMIP6/src/context_server.hpp

    r1225 r1228  
    1717    bool eventLoop(bool enableEventsProcessing = true); 
    1818    void listen(void) ; 
    19     void listenPendingRequest(MPI_Status& status) ; 
     19    bool listenPendingRequest(MPI_Status& status) ; 
    2020    void checkPendingRequest(void) ; 
    2121    void processRequest(int rank, char* buff,int count) ; 
Note: See TracChangeset for help on using the changeset viewer.