From: eap Date: Fri, 31 Aug 2018 12:35:57 +0000 (+0300) Subject: Regression: mesh objects are not deleted => memory leaks X-Git-Tag: V9_1_0~6 X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=commitdiff_plain;h=5552aec787c289730a35843d295811cfdadaacd3 Regression: mesh objects are not deleted => memory leaks --- diff --git a/src/SMESH/SMESH_subMesh.cxx b/src/SMESH/SMESH_subMesh.cxx index 57d0d338d..a3b12c77e 100644 --- a/src/SMESH/SMESH_subMesh.cxx +++ b/src/SMESH/SMESH_subMesh.cxx @@ -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() )) diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index af0dab97f..1b1ccc4ea 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -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(); } diff --git a/src/SMESH_SWIG/YACS_geomesh0.py b/src/SMESH_SWIG/YACS_geomesh0.py index 584739934..e9edd4e09 100644 --- a/src/SMESH_SWIG/YACS_geomesh0.py +++ b/src/SMESH_SWIG/YACS_geomesh0.py @@ -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 - \ No newline at end of file diff --git a/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx b/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx index b53777da1..19461a774 100644 --- a/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx +++ b/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx @@ -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;