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

Use _id instead of _idDoc

-  _myMeshDS      = theDocument->GetMesh(_idDoc);
+  _myMeshDS      = theDocument->NewMesh(theIsEmbeddedMode,theLocalId);
This commit is contained in:
eap 2012-12-14 13:24:26 +00:00
parent 730908a7f4
commit 413fec58c7

View File

@ -103,13 +103,12 @@ SMESH_Mesh::SMESH_Mesh(int theLocalId,
_studyId = theStudyId; _studyId = theStudyId;
_gen = theGen; _gen = theGen;
_myDocument = theDocument; _myDocument = theDocument;
_idDoc = theDocument->NewMesh(theIsEmbeddedMode); _myMeshDS = theDocument->NewMesh(theIsEmbeddedMode,theLocalId);
_myMeshDS = theDocument->GetMesh(_idDoc);
_isShapeToMesh = false; _isShapeToMesh = false;
_isAutoColor = false; _isAutoColor = false;
_isModified = false; _isModified = false;
_shapeDiagonal = 0.0; _shapeDiagonal = 0.0;
_callUp = 0; _callUp = NULL;
_myMeshDS->ShapeToMesh( PseudoShape() ); _myMeshDS->ShapeToMesh( PseudoShape() );
} }
@ -122,7 +121,6 @@ SMESH_Mesh::SMESH_Mesh(int theLocalId,
SMESH_Mesh::SMESH_Mesh(): SMESH_Mesh::SMESH_Mesh():
_id(-1), _id(-1),
_studyId(-1), _studyId(-1),
_idDoc(-1),
_groupId( 0 ), _groupId( 0 ),
_nbSubShapes( 0 ), _nbSubShapes( 0 ),
_isShapeToMesh( false ), _isShapeToMesh( false ),
@ -660,8 +658,6 @@ SMESH_Hypothesis::Hypothesis_Status
} }
HasModificationsToDiscard(); // to reset _isModified flag if a mesh becomes empty HasModificationsToDiscard(); // to reset _isModified flag if a mesh becomes empty
GetMeshDS()->Modified();
if(MYDEBUG) subMesh->DumpAlgoState(true); if(MYDEBUG) subMesh->DumpAlgoState(true);
if(MYDEBUG) SCRUTE(ret); if(MYDEBUG) SCRUTE(ret);
return ret; return ret;
@ -735,8 +731,6 @@ SMESH_Hypothesis::Hypothesis_Status
HasModificationsToDiscard(); // to reset _isModified flag if mesh become empty HasModificationsToDiscard(); // to reset _isModified flag if mesh become empty
GetMeshDS()->Modified();
if(MYDEBUG) subMesh->DumpAlgoState(true); if(MYDEBUG) subMesh->DumpAlgoState(true);
if(MYDEBUG) SCRUTE(ret); if(MYDEBUG) SCRUTE(ret);
return ret; return ret;
@ -1262,7 +1256,7 @@ void SMESH_Mesh::ExportMED(const char * file,
myWriter.SetFile ( file, MED::EVersion(theVersion) ); myWriter.SetFile ( file, MED::EVersion(theVersion) );
myWriter.SetMesh ( meshPart ? (SMESHDS_Mesh*) meshPart : _myMeshDS ); myWriter.SetMesh ( meshPart ? (SMESHDS_Mesh*) meshPart : _myMeshDS );
if ( !theMeshName ) if ( !theMeshName )
myWriter.SetMeshId ( _idDoc ); myWriter.SetMeshId ( _id );
else { else {
myWriter.SetMeshId ( -1 ); myWriter.SetMeshId ( -1 );
myWriter.SetMeshName( theMeshName ); myWriter.SetMeshName( theMeshName );
@ -1355,7 +1349,7 @@ void SMESH_Mesh::ExportDAT(const char * file,
DriverDAT_W_SMDS_Mesh myWriter; DriverDAT_W_SMDS_Mesh myWriter;
myWriter.SetFile( file ); myWriter.SetFile( file );
myWriter.SetMesh( meshPart ? (SMESHDS_Mesh*) meshPart : _myMeshDS ); myWriter.SetMesh( meshPart ? (SMESHDS_Mesh*) meshPart : _myMeshDS );
myWriter.SetMeshId(_idDoc); myWriter.SetMeshId(_id);
myWriter.Perform(); myWriter.Perform();
} }
@ -1372,7 +1366,7 @@ void SMESH_Mesh::ExportUNV(const char * file,
DriverUNV_W_SMDS_Mesh myWriter; DriverUNV_W_SMDS_Mesh myWriter;
myWriter.SetFile( file ); myWriter.SetFile( file );
myWriter.SetMesh( meshPart ? (SMESHDS_Mesh*) meshPart : _myMeshDS ); myWriter.SetMesh( meshPart ? (SMESHDS_Mesh*) meshPart : _myMeshDS );
myWriter.SetMeshId(_idDoc); myWriter.SetMeshId(_id);
// myWriter.SetGroups(_mapGroup); // myWriter.SetGroups(_mapGroup);
if ( !meshPart ) if ( !meshPart )
@ -1405,7 +1399,7 @@ void SMESH_Mesh::ExportSTL(const char * file,
myWriter.SetFile( file ); myWriter.SetFile( file );
myWriter.SetIsAscii( isascii ); myWriter.SetIsAscii( isascii );
myWriter.SetMesh( meshPart ? (SMESHDS_Mesh*) meshPart : _myMeshDS); myWriter.SetMesh( meshPart ? (SMESHDS_Mesh*) meshPart : _myMeshDS);
myWriter.SetMeshId(_idDoc); myWriter.SetMeshId(_id);
myWriter.Perform(); myWriter.Perform();
} }