Regression: mesh objects are not deleted => memory leaks

This commit is contained in:
eap 2018-08-31 15:35:57 +03:00
parent db7a4ffa0c
commit 5552aec787
4 changed files with 29 additions and 20 deletions

View File

@ -2592,14 +2592,13 @@ const std::vector< SMESH_subMesh * > & SMESH_subMesh::GetAncestors() const
SMESH_subMesh* me = const_cast< SMESH_subMesh* >( this );
me->_ancestors.reserve( ancShapes.Extent() );
TopTools_MapOfShape map;
// assure that all sub-meshes exist
TopoDS_Shape mainShape = _father->GetShapeToMesh();
if (!mainShape.IsNull())
{
_father->GetSubMesh( _father->GetShapeToMesh() )->DependsOn();
}
if ( !mainShape.IsNull() )
_father->GetSubMesh( mainShape )->DependsOn();
TopTools_MapOfShape map;
for ( TopTools_ListIteratorOfListOfShape it( ancShapes ); it.More(); it.Next() )
if ( SMESH_subMesh* sm = _father->GetSubMeshContaining( it.Value() ))
if ( map.Add( it.Value() ))

View File

@ -308,10 +308,12 @@ static SALOMEDS::SObject_ptr publish(CORBA::Object_ptr theIOR,
if ( !sameIOR )
{
iorAttr->SetValue( objStr.in() );
// UnRegister() !!! --> No: random problems when meshing in parallel (yacs foreach) in distributed python scripts
// SALOME::GenericObj_var genObj = SALOME::GenericObj::_narrow( theIOR );
// if ( !genObj->_is_nil() )
// genObj->UnRegister();
// UnRegister() !!! --> random problems when meshing in parallel (yacs foreach) in
// distributed python scripts, because simultaneously created meshes are
// published into the same SO; as a result the mesh published first dies
SALOME::GenericObj_var genObj = SALOME::GenericObj::_narrow( theIOR );
if ( !genObj->_is_nil() )
genObj->UnRegister();
}
}
@ -598,7 +600,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SMESH::SMESH_Mesh_ptr theMesh,
else
aTag++;
aMeshSO = publish ( theMesh, father, aTag, "ICON_SMESH_TREE_MESH_WARN" );
aMeshSO = publish( theMesh, father, aTag, "ICON_SMESH_TREE_MESH_WARN" );
if ( aMeshSO->_is_nil() )
return aMeshSO._retn();
}

View File

@ -82,8 +82,15 @@ def geomesh(l0, r0, h0, d0, d1, my_container, direc):
#geompy.addToStudyInFather( barre, f1, 'f1' )
#geompy.addToStudyInFather( barre, f2, 'f2' )
smesh.SetEnablePublish( False )
isTetra = False
barre_1 = smesh.Mesh(barre)
# SO = salome.myStudy.FindObjectIOR(salome.myStudy.ConvertObjectToIOR(barre_1.GetMesh()))
# if SO:
# print ("_______",SO.GetID(),SO.GetName())
# else:
# print ("_______NO_SO!!!")
if (isTetra):
NETGEN_1D_2D_3D = barre_1.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
NETGEN_3D_Parameters_1 = NETGEN_1D_2D_3D.Parameters()
@ -139,14 +146,15 @@ def geomesh(l0, r0, h0, d0, d1, my_container, direc):
def clearMesh(theMesh, theStudy, aName):
theMesh.Clear()
aMesh = theMesh.GetMesh()
aStudyBuilder = theStudy.NewBuilder()
SO = theStudy.FindObjectIOR(theStudy.ConvertObjectToIOR(aMesh))
objects_to_unpublish = [SO]
refs = theStudy.FindDependances(SO)
objects_to_unpublish += refs
for o in objects_to_unpublish:
if o is not None:
aStudyBuilder.RemoveObjectWithChildren(o)
aMesh.UnRegister()
# aStudyBuilder = theStudy.NewBuilder()
# SO = theStudy.FindObjectIOR(theStudy.ConvertObjectToIOR(aMesh))
# objects_to_unpublish = [SO]
# refs = theStudy.FindDependances(SO)
# objects_to_unpublish += refs
# for o in objects_to_unpublish:
# if o is not None:
# aStudyBuilder.RemoveObjectWithChildren(o)
print("clearMesh done:", aName)
def genere(r0, h0, my_container, direc):
@ -164,4 +172,3 @@ def genere2(r0h0, my_container, direc):
d1 = d0/2.
res = geomesh(l0, r0, h0, d0, d1, my_container, direc)
return res

View File

@ -127,6 +127,7 @@ bool StdMeshers_Quadrangle_2D::CheckHypothesis
myTrianglePreference = false;
myHelper = (SMESH_MesherHelper*)NULL;
myParams = NULL;
myProxyMesh.reset();
myQuadList.clear();
aStatus = SMESH_Hypothesis::HYP_OK;