21948: EDF SMESH : Memory is not freed when deleting a mesh

Make clear free as much as possible memory
This commit is contained in:
eap 2012-12-14 13:04:42 +00:00
parent fa38ad0b49
commit 585362053b

View File

@ -2656,6 +2656,13 @@ SMDS_Mesh::~SMDS_Mesh()
myNodeIDFactory->ReleaseID(node->GetID(), node->getVtkId()); myNodeIDFactory->ReleaseID(node->GetID(), node->getVtkId());
} }
} }
myGrid->Delete();
delete myNodePool;
delete myVolumePool;
delete myFacePool;
delete myEdgePool;
delete myBallPool;
} }
//================================================================================ //================================================================================
@ -2688,50 +2695,56 @@ void SMDS_Mesh::Clear()
myElementIDFactory->Clear(); myElementIDFactory->Clear();
} }
SMDS_ElemIteratorPtr itv = elementsIterator(); // SMDS_ElemIteratorPtr itv = elementsIterator();
while (itv->more()) // while (itv->more())
{ // {
SMDS_MeshElement* elem = (SMDS_MeshElement*)(itv->next()); // SMDS_MeshElement* elem = (SMDS_MeshElement*)(itv->next());
SMDSAbs_ElementType aType = elem->GetType(); // SMDSAbs_ElementType aType = elem->GetType();
switch (aType) // switch (aType)
{ // {
case SMDSAbs_0DElement: // case SMDSAbs_0DElement:
delete elem; // delete elem;
break; // break;
case SMDSAbs_Edge: // case SMDSAbs_Edge:
myEdgePool->destroy(static_cast<SMDS_VtkEdge*>(elem)); // myEdgePool->destroy(static_cast<SMDS_VtkEdge*>(elem));
break; // break;
case SMDSAbs_Face: // case SMDSAbs_Face:
myFacePool->destroy(static_cast<SMDS_VtkFace*>(elem)); // myFacePool->destroy(static_cast<SMDS_VtkFace*>(elem));
break; // break;
case SMDSAbs_Volume: // case SMDSAbs_Volume:
myVolumePool->destroy(static_cast<SMDS_VtkVolume*>(elem)); // myVolumePool->destroy(static_cast<SMDS_VtkVolume*>(elem));
break; // break;
case SMDSAbs_Ball: // case SMDSAbs_Ball:
myBallPool->destroy(static_cast<SMDS_BallElement*>(elem)); // myBallPool->destroy(static_cast<SMDS_BallElement*>(elem));
break; // break;
default: // default:
break; // break;
} // }
} // }
myCells.clear(); myVolumePool->clear();
myCellIdVtkToSmds.clear(); myFacePool->clear();
//myCellIdSmdsToVtk.clear(); myEdgePool->clear();
myBallPool->clear();
clearVector( myCells );
clearVector( myCellIdVtkToSmds );
SMDS_NodeIteratorPtr itn = nodesIterator(); SMDS_NodeIteratorPtr itn = nodesIterator();
while (itn->more()) while (itn->more())
{ {
SMDS_MeshNode *node = (SMDS_MeshNode*)(itn->next()); SMDS_MeshNode *node = (SMDS_MeshNode*)(itn->next());
node->SetPosition(SMDS_SpacePosition::originSpacePosition()); node->SetPosition(SMDS_SpacePosition::originSpacePosition());
myNodePool->destroy(node); //myNodePool->destroy(node);
} }
myNodes.clear(); myNodePool->clear();
clearVector( myNodes );
list<SMDS_Mesh*>::iterator itc=myChildren.begin(); list<SMDS_Mesh*>::iterator itc=myChildren.begin();
while(itc!=myChildren.end()) while(itc!=myChildren.end())
(*itc)->Clear(); (*itc)->Clear();
myModified = false; myModified = false;
myModifTime++;
xmin = 0; xmax = 0; xmin = 0; xmax = 0;
ymin = 0; ymax = 0; ymin = 0; ymax = 0;
zmin = 0; zmax = 0; zmin = 0; zmax = 0;