mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-01-29 23:20:33 +05:00
21948: EDF SMESH : Memory is not freed when deleting a mesh
Elimenate memory leaks on CORBA objects, servants of SALOMEDS objects etc
This commit is contained in:
parent
413bba9e87
commit
64ed2f3e93
@ -554,9 +554,10 @@ QString GEOMBase_Helper::addInStudy( GEOM::GEOM_Object_ptr theObj, const char* t
|
|||||||
getGeomEngine()->AddInStudy(aStudyDS, theObj, theName, aFatherObj);
|
getGeomEngine()->AddInStudy(aStudyDS, theObj, theName, aFatherObj);
|
||||||
|
|
||||||
QString anEntry;
|
QString anEntry;
|
||||||
if ( !aSO->_is_nil() )
|
if ( !aSO->_is_nil() ) {
|
||||||
anEntry = aSO->GetID();
|
CORBA::String_var entry = aSO->GetID();
|
||||||
|
anEntry = entry.in();
|
||||||
|
}
|
||||||
// Each dialog is responsible for this method implementation,
|
// Each dialog is responsible for this method implementation,
|
||||||
// default implementation does nothing
|
// default implementation does nothing
|
||||||
restoreSubShapes(aStudyDS, aSO);
|
restoreSubShapes(aStudyDS, aSO);
|
||||||
@ -770,7 +771,6 @@ bool GEOMBase_Helper::commitCommand( const char* )
|
|||||||
//================================================================
|
//================================================================
|
||||||
bool GEOMBase_Helper::hasCommand() const
|
bool GEOMBase_Helper::hasCommand() const
|
||||||
{
|
{
|
||||||
bool res = (bool) myCommand;
|
|
||||||
return (bool)myCommand;
|
return (bool)myCommand;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1137,17 +1137,17 @@ GEOM::GEOM_Object_ptr GEOMBase_Helper::findObjectInFather( GEOM::GEOM_Object_ptr
|
|||||||
if ( sobject ) {
|
if ( sobject ) {
|
||||||
_PTR(ChildIterator) it( studyDS->NewChildIterator( sobject ) );
|
_PTR(ChildIterator) it( studyDS->NewChildIterator( sobject ) );
|
||||||
for ( ; it->More() && !found; it->Next() ) {
|
for ( ; it->More() && !found; it->Next() ) {
|
||||||
GEOM::GEOM_Object_var cobject = GEOM::GEOM_Object::_narrow( GeometryGUI::ClientSObjectToObject( it->Value() ) );
|
GEOM::GEOM_Object_var cobject = GEOM::GEOM_Object::_narrow( GeometryGUI::ClientSObjectToObject( it->Value() ) );
|
||||||
if ( !CORBA::is_nil( cobject ) ) {
|
if ( !CORBA::is_nil( cobject ) ) {
|
||||||
GEOM::ListOfLong_var indices = cobject->GetSubShapeIndices();
|
GEOM::ListOfLong_var indices = cobject->GetSubShapeIndices();
|
||||||
int length = indices->length();
|
int length = indices->length();
|
||||||
for ( int i = 0; i < length && !found; i++ ) {
|
for ( int i = 0; i < length && !found; i++ ) {
|
||||||
if ( indices[i] == theIndex ) {
|
if ( indices[i] == theIndex ) {
|
||||||
object = cobject;
|
object = cobject;
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1277,58 +1277,58 @@ QList<GEOM::GeomObjPtr> GEOMBase_Helper::getSelected( const QList<TopAbs_ShapeEn
|
|||||||
SALOME_ListIteratorOfListIO it( selected );
|
SALOME_ListIteratorOfListIO it( selected );
|
||||||
bool stopped = false;
|
bool stopped = false;
|
||||||
for ( ; it.More() && !stopped; it.Next() ) {
|
for ( ; it.More() && !stopped; it.Next() ) {
|
||||||
Handle(SALOME_InteractiveObject) IO = it.Value();
|
Handle(SALOME_InteractiveObject) IO = it.Value();
|
||||||
GEOM::GeomObjPtr object = GEOMBase::ConvertIOinGEOMObject( IO );
|
GEOM::GeomObjPtr object = GEOMBase::ConvertIOinGEOMObject( IO );
|
||||||
if ( object ) {
|
if ( object ) {
|
||||||
TColStd_IndexedMapOfInteger subShapes;
|
TColStd_IndexedMapOfInteger subShapes;
|
||||||
selMgr->GetIndexes( IO, subShapes );
|
selMgr->GetIndexes( IO, subShapes );
|
||||||
int nbSubShapes = subShapes.Extent();
|
int nbSubShapes = subShapes.Extent();
|
||||||
if ( nbSubShapes == 0 ) {
|
if ( nbSubShapes == 0 ) {
|
||||||
// global selection
|
// global selection
|
||||||
if ( typeInList( (TopAbs_ShapeEnum)(object->GetShapeType()), types ) ) {
|
if ( typeInList( (TopAbs_ShapeEnum)(object->GetShapeType()), types ) ) {
|
||||||
result << object;
|
result << object;
|
||||||
if ( count > 0 ) {
|
if ( count > 0 ) {
|
||||||
if ( strict && result.count() > count ) {
|
if ( strict && result.count() > count ) {
|
||||||
result.clear();
|
result.clear();
|
||||||
stopped = true;
|
stopped = true;
|
||||||
}
|
}
|
||||||
else if ( !strict && result.count() == count )
|
else if ( !strict && result.count() == count )
|
||||||
stopped = true;
|
stopped = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( strict ) {
|
else if ( strict ) {
|
||||||
result.clear();
|
result.clear();
|
||||||
stopped = true;
|
stopped = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// local selection
|
// local selection
|
||||||
for ( int i = 1; i <= nbSubShapes && !stopped; i++ ) {
|
for ( int i = 1; i <= nbSubShapes && !stopped; i++ ) {
|
||||||
int idx = subShapes( i );
|
int idx = subShapes( i );
|
||||||
GEOM::GeomObjPtr subShape = findObjectInFather( object.get(), idx );
|
GEOM::GeomObjPtr subShape = findObjectInFather( object.get(), idx );
|
||||||
if ( !subShape ) {
|
if ( !subShape ) {
|
||||||
// sub-shape is not yet published in the study
|
// sub-shape is not yet published in the study
|
||||||
GEOM::ShapesOpPtr shapesOp = getGeomEngine()->GetIShapesOperations( getStudyId() );
|
GEOM::ShapesOpPtr shapesOp = getGeomEngine()->GetIShapesOperations( getStudyId() );
|
||||||
subShape.take( shapesOp->GetSubShape( object.get(), idx ) ); // take ownership!
|
subShape.take( shapesOp->GetSubShape( object.get(), idx ) ); // take ownership!
|
||||||
}
|
}
|
||||||
if ( typeInList( (TopAbs_ShapeEnum)(subShape->GetShapeType()), types ) ) {
|
if ( typeInList( (TopAbs_ShapeEnum)(subShape->GetShapeType()), types ) ) {
|
||||||
result << subShape;
|
result << subShape;
|
||||||
if ( count > 0 ) {
|
if ( count > 0 ) {
|
||||||
if ( strict && result.count() > count ) {
|
if ( strict && result.count() > count ) {
|
||||||
result.clear();
|
result.clear();
|
||||||
stopped = true;
|
stopped = true;
|
||||||
}
|
}
|
||||||
else if ( !strict && result.count() == count )
|
else if ( !strict && result.count() == count )
|
||||||
stopped = true;
|
stopped = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( strict ) {
|
else if ( strict ) {
|
||||||
result.clear();
|
result.clear();
|
||||||
stopped = true;
|
stopped = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -206,7 +206,7 @@ char* GEOM_Object_i::GetName()
|
|||||||
char* aName = _impl->GetName();
|
char* aName = _impl->GetName();
|
||||||
if (aName)
|
if (aName)
|
||||||
return aName; // this is already copy of pointer (see implementation of _impl)
|
return aName; // this is already copy of pointer (see implementation of _impl)
|
||||||
return strdup("");
|
return CORBA::string_dup("");
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
Loading…
Reference in New Issue
Block a user