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/axis.cpp

    r2206 r2267  
    747747      for (int i=0;i<n;i++) ind(i)=index(i) ; 
    748748 
    749       localElement_ = new CLocalElement(rank, n_glo, ind) ; 
     749      localElement_ = make_shared<CLocalElement>(rank, n_glo, ind) ; 
    750750   } 
    751751 
     
    783783   void CAxis::computeModelToWorkflowConnector(void) 
    784784   {  
    785      CLocalView* srcView=getLocalView(CElementView::MODEL) ; 
    786      CLocalView* dstView=getLocalView(CElementView::WORKFLOW) ; 
    787      modelToWorkflowConnector_ = new CLocalConnector(srcView, dstView);  
     785     shared_ptr<CLocalView> srcView=getLocalView(CElementView::MODEL) ; 
     786     shared_ptr<CLocalView> dstView=getLocalView(CElementView::WORKFLOW) ; 
     787     modelToWorkflowConnector_ = make_shared<CLocalConnector>(srcView, dstView);  
    788788     modelToWorkflowConnector_->computeConnector() ; 
    789789   } 
     
    834834      for (auto& rankServer : client->getRanksServerLeader()) globalIndex[rankServer].reference(indGlo.copy());  
    835835    } 
    836     remoteElement_[client] = new CDistributedElement(n_glo, globalIndex) ; 
     836    remoteElement_[client] = make_shared<CDistributedElement>(n_glo, globalIndex) ; 
    837837    remoteElement_[client]->addFullView() ; 
    838838  } 
    839839  
    840840  void CAxis::distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex,  
    841                                  CScattererConnector* &scattererConnector, const string& axisId) 
     841                                 shared_ptr<CScattererConnector> &scattererConnector, const string& axisId) 
    842842  { 
    843843    string serverAxisId = axisId.empty() ? this->getId() : axisId ; 
     
    846846    this->sendAllAttributesToServer(client, serverAxisId)  ; 
    847847 
    848     CDistributedElement scatteredElement(n_glo,globalIndex) ; 
    849     scatteredElement.addFullView() ; 
    850     scattererConnector = new CScattererConnector(localElement_->getView(CElementView::FULL), scatteredElement.getView(CElementView::FULL),  
    851                                                  context->getIntraComm(), client->getRemoteSize()) ; 
     848    auto scatteredElement = make_shared<CDistributedElement>(n_glo,globalIndex) ; 
     849    scatteredElement->addFullView() ; 
     850    scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL),  
     851                                                          context->getIntraComm(), client->getRemoteSize()) ; 
    852852    scattererConnector->computeConnector() ; 
    853853     
     
    866866    scattererConnector->transfer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event1,message1) ; 
    867867 
    868     sendDistributedAttributes(client, *scattererConnector, axisId) ; 
     868    sendDistributedAttributes(client, scattererConnector, axisId) ; 
    869869   
    870870    // phase 2 send the mask : data index + mask2D 
    871871    CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 
    872872    CArray<bool,1> maskOut ; 
    873     CLocalConnector workflowToFull(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 
    874     workflowToFull.computeConnector() ; 
     873    auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 
     874    workflowToFull->computeConnector() ; 
    875875    maskIn=true ; 
    876     workflowToFull.transfer(maskIn,maskOut,false) ; 
     876    workflowToFull->transfer(maskIn,maskOut,false) ; 
    877877 
    878878    // phase 3 : prepare grid scatterer connector to send data from client to server 
     
    880880    map<int,CArray<bool,1>> maskOut2 ;  
    881881    scattererConnector->transfer(maskOut, maskOut2) ; 
    882     scatteredElement.addView(CElementView::WORKFLOW, maskOut2) ; 
    883     scatteredElement.getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 
     882    scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 
     883    scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 
    884884    // create new workflow view for scattered element 
    885     CDistributedElement clientToServerElement(scatteredElement.getGlobalSize(), workflowGlobalIndex) ; 
    886     clientToServerElement.addFullView() ; 
     885    auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 
     886    clientToServerElement->addFullView() ; 
    887887    CEventClient event2(getType(), EVENT_ID_AXIS_DISTRIBUTION); 
    888888    CMessage message2 ; 
    889889    message2<<serverAxisId<<2 ;  
    890     clientToServerElement.sendToServer(client, event2, message2) ;  
    891     clientToServerConnector_[client] = new CScattererConnector(localElement_->getView(CElementView::WORKFLOW), clientToServerElement.getView(CElementView::FULL),  
    892                                                               context->getIntraComm(), client->getRemoteSize()) ; 
     890    clientToServerElement->sendToServer(client, event2, message2) ;  
     891    clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL),  
     892                                                                        context->getIntraComm(), client->getRemoteSize()) ; 
    893893    clientToServerConnector_[client]->computeConnector() ; 
    894894 
    895     clientFromServerConnector_[client] = new CGathererConnector(clientToServerElement.getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); 
     895    clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); 
    896896    clientFromServerConnector_[client]->computeConnector() ; 
    897897 
     
    916916    if (phasis==0) // receive the remote element to construct the full view 
    917917    { 
    918       localElement_ = new  CLocalElement(context->getIntraCommRank(),event) ; 
     918      localElement_ = make_shared<CLocalElement>(context->getIntraCommRank(),event) ; 
    919919      localElement_->addFullView() ; 
    920920      // construct the local dimension and indexes 
     
    937937    { 
    938938      CContext* context = CContext::getCurrent(); 
    939       CDistributedElement* elementFrom = new  CDistributedElement(event) ; 
     939      shared_ptr<CDistributedElement> elementFrom = make_shared<CDistributedElement>(event) ; 
    940940      elementFrom->addFullView() ; 
    941       gathererConnector_ = new CGathererConnector(elementFrom->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; 
     941      gathererConnector_ = make_shared<CGathererConnector>(elementFrom->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; 
    942942      gathererConnector_->computeConnector() ;  
    943943    } 
     
    945945    { 
    946946//      delete gathererConnector_ ; 
    947       elementFrom_ = new  CDistributedElement(event) ; 
     947      elementFrom_ = make_shared<CDistributedElement>(event) ; 
    948948      elementFrom_->addFullView() ; 
    949 //      gathererConnector_ =  new CGathererConnector(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; 
     949//      gathererConnector_ =  make_shared<CGathererConnector>(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; 
    950950//      gathererConnector_ -> computeConnector() ; 
    951951    } 
     
    961961    mask.reference(serverMask.copy()) ; 
    962962  
    963     serverFromClientConnector_ = new CGathererConnector(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)) ; 
     963    serverFromClientConnector_ = make_shared<CGathererConnector>(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)) ; 
    964964    serverFromClientConnector_->computeConnector() ; 
    965965       
    966     serverToClientConnector_ = new CScattererConnector(localElement_->getView(CElementView::WORKFLOW), elementFrom_->getView(CElementView::FULL), 
    967                                                          context->getIntraComm(), client->getRemoteSize()) ; 
     966    serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementFrom_->getView(CElementView::FULL), 
     967                                                                context->getIntraComm(), client->getRemoteSize()) ; 
    968968    serverToClientConnector_->computeConnector() ; 
    969969  } 
    970970  CATCH_DUMP_ATTR 
    971971 
    972   void CAxis::sendDistributedAttributes(CContextClient* client, CScattererConnector& scattererConnector, const string& axisId) 
     972  void CAxis::sendDistributedAttributes(CContextClient* client, shared_ptr<CScattererConnector> scattererConnector, const string& axisId) 
    973973  { 
    974974    string serverAxisId = axisId.empty() ? this->getId() : axisId ; 
     
    981981        CMessage message ; 
    982982        message<<serverAxisId<<string("value") ;  
    983         scattererConnector.transfer(value, client, event,message) ; 
     983        scattererConnector->transfer(value, client, event,message) ; 
    984984      } 
    985985    } 
     
    991991        CMessage message ; 
    992992        message<<serverAxisId<<string("bounds") ;  
    993         scattererConnector.transfer(2, bounds, client, event,message) ; 
     993        scattererConnector->transfer(2, bounds, client, event,message) ; 
    994994      } 
    995995    } 
     
    10161016        CMessage message ; 
    10171017        message<<serverAxisId<<string("label")<<maxSize ; 
    1018         scattererConnector.transfer(maxSize, charArray, client, event,message) ; 
     1018        scattererConnector->transfer(maxSize, charArray, client, event,message) ; 
    10191019      } 
    10201020    } 
Note: See TracChangeset for help on using the changeset viewer.