Ignore:
Timestamp:
12/01/21 16:52:24 (3 years ago)
Author:
ymipsl
Message:

tracking memory leak
Elements, views, and connectors are now managed with shared pointer.
YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/node/scalar.cpp

    r2264 r2267  
    346346      CArray<size_t,1> index(n) ; 
    347347      if (n==1) index(0)=0 ; 
    348       localElement_ = new CLocalElement(rank, 1, index) ; 
     348      localElement_ = make_shared<CLocalElement>(rank, 1, index) ; 
    349349   } 
    350350 
     
    377377   void CScalar::computeModelToWorkflowConnector(void) 
    378378   {  
    379      CLocalView* srcView=getLocalView(CElementView::MODEL) ; 
    380      CLocalView* dstView=getLocalView(CElementView::WORKFLOW) ; 
    381      modelToWorkflowConnector_ = new CLocalConnector(srcView, dstView);  
     379     shared_ptr<CLocalView> srcView=getLocalView(CElementView::MODEL) ; 
     380     shared_ptr<CLocalView> dstView=getLocalView(CElementView::WORKFLOW) ; 
     381     modelToWorkflowConnector_ = make_shared<CLocalConnector>(srcView, dstView);  
    382382     modelToWorkflowConnector_->computeConnector() ; 
    383383   } 
     
    409409      for (auto& rankServer : client->getRanksServerLeader()) globalIndex[rankServer].reference(indGlo.copy()) ;  
    410410    } 
    411     remoteElement_[client] = new CDistributedElement(nglo, globalIndex) ; 
     411    remoteElement_[client] = make_shared<CDistributedElement>(nglo, globalIndex) ; 
    412412    remoteElement_[client]->addFullView() ; 
    413413  } 
    414414  
    415415  void CScalar::distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex,  
    416                                    CScattererConnector* &scattererConnector, const string& scalarId) 
     416                                   shared_ptr<CScattererConnector> &scattererConnector, const string& scalarId) 
    417417  { 
    418418    string serverScalarId = scalarId.empty() ? this->getId() : scalarId ; 
     
    421421    this->sendAllAttributesToServer(client, serverScalarId)  ; 
    422422 
    423     CDistributedElement scatteredElement(1,globalIndex) ; 
    424     scatteredElement.addFullView() ; 
    425     scattererConnector = new CScattererConnector(localElement_->getView(CElementView::FULL), scatteredElement.getView(CElementView::FULL),  
    426                                                  context->getIntraComm(), client->getRemoteSize()) ; 
     423    auto scatteredElement = make_shared<CDistributedElement>(1,globalIndex) ; 
     424    scatteredElement->addFullView() ; 
     425    scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL),  
     426                                                          context->getIntraComm(), client->getRemoteSize()) ; 
    427427    scattererConnector->computeConnector() ; 
    428428     
     
    441441    scattererConnector->transfer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event1,message1) ; 
    442442 
    443     sendDistributedAttributes(client, *scattererConnector, scalarId) ; 
     443    sendDistributedAttributes(client, scattererConnector, scalarId) ; 
    444444   
    445445    // phase 2 send the mask : data index + mask2D 
    446446    CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 
    447447    CArray<bool,1> maskOut ; 
    448     CLocalConnector workflowToFull(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 
    449     workflowToFull.computeConnector() ; 
     448    auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 
     449    workflowToFull->computeConnector() ; 
    450450    maskIn=true ; 
    451     workflowToFull.transfer(maskIn,maskOut,false) ; 
     451    workflowToFull->transfer(maskIn,maskOut,false) ; 
    452452 
    453453    // phase 3 : prepare grid scatterer connector to send data from client to server 
     
    455455    map<int,CArray<bool,1>> maskOut2 ;  
    456456    scattererConnector->transfer(maskOut, maskOut2) ; 
    457     scatteredElement.addView(CElementView::WORKFLOW, maskOut2) ; 
    458     scatteredElement.getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 
     457    scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 
     458    scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 
    459459    // create new workflow view for scattered element 
    460     CDistributedElement clientToServerElement(scatteredElement.getGlobalSize(), workflowGlobalIndex) ; 
    461     clientToServerElement.addFullView() ; 
     460    auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 
     461    clientToServerElement->addFullView() ; 
    462462    CEventClient event2(getType(), EVENT_ID_SCALAR_DISTRIBUTION); 
    463463    CMessage message2 ; 
    464464    message2<<serverScalarId<<2 ;  
    465     clientToServerElement.sendToServer(client, event2, message2) ;  
    466     clientToServerConnector_[client] = new CScattererConnector(localElement_->getView(CElementView::WORKFLOW), clientToServerElement.getView(CElementView::FULL), 
    467                                                                context->getIntraComm(), client->getRemoteSize()) ; 
     465    clientToServerElement->sendToServer(client, event2, message2) ;  
     466    clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL), 
     467                                                                        context->getIntraComm(), client->getRemoteSize()) ; 
    468468    clientToServerConnector_[client]->computeConnector() ; 
    469469 
    470     clientFromServerConnector_[client] = new CGathererConnector(clientToServerElement.getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); 
     470    clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); 
    471471    clientFromServerConnector_[client]->computeConnector() ; 
    472472 
     
    489489    if (phasis==0) // receive the remote element to construct the full view 
    490490    { 
    491       localElement_ = new  CLocalElement(context->getIntraCommRank(),event) ; 
     491      localElement_ = make_shared<CLocalElement>(context->getIntraCommRank(),event) ; 
    492492      localElement_->addFullView() ; 
    493493      // construct the local dimension and indexes 
     
    499499    { 
    500500      CContext* context = CContext::getCurrent(); 
    501       CDistributedElement* elementFrom = new  CDistributedElement(event) ; 
     501      shared_ptr<CDistributedElement> elementFrom = make_shared<CDistributedElement>(event) ; 
    502502      elementFrom->addFullView() ; 
    503       gathererConnector_ = new CGathererConnector(elementFrom->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; 
     503      gathererConnector_ = make_shared<CGathererConnector>(elementFrom->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; 
    504504      gathererConnector_->computeConnector() ;  
    505505    } 
     
    507507    { 
    508508//      delete gathererConnector_ ; 
    509       elementFrom_ = new  CDistributedElement(event) ; 
     509      elementFrom_ = make_shared<CDistributedElement>(event) ; 
    510510      elementFrom_->addFullView() ; 
    511 //      gathererConnector_ =  new CGathererConnector(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; 
     511//      gathererConnector_ =  make_shared<CGathererConnector>(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; 
    512512//      gathererConnector_ -> computeConnector() ; 
    513513    } 
     
    522522    if (serverMask.numElements()==1) mask = serverMask(0) ; 
    523523  
    524     serverFromClientConnector_ = new CGathererConnector(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)) ; 
     524    serverFromClientConnector_ = make_shared<CGathererConnector>(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)) ; 
    525525    serverFromClientConnector_->computeConnector() ; 
    526526       
    527     serverToClientConnector_ = new CScattererConnector(localElement_->getView(CElementView::WORKFLOW), elementFrom_->getView(CElementView::FULL), 
    528                                                          context->getIntraComm(), client->getRemoteSize()) ; 
     527    serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementFrom_->getView(CElementView::FULL), 
     528                                                                context->getIntraComm(), client->getRemoteSize()) ; 
    529529    serverToClientConnector_->computeConnector() ; 
    530530  } 
    531531  CATCH_DUMP_ATTR 
    532532 
    533   void CScalar::sendDistributedAttributes(CContextClient* client, CScattererConnector& scattererConnector, const string& scalarId) 
     533  void CScalar::sendDistributedAttributes(CContextClient* client, shared_ptr<CScattererConnector> scattererConnector, const string& scalarId) 
    534534  { 
    535535    string serverScalarId = scalarId.empty() ? this->getId() : scalarId ; 
Note: See TracChangeset for help on using the changeset viewer.