From 7a89c829749d2e60c4fbf3cef3b2354bd9d42d54 Mon Sep 17 00:00:00 2001 From: akl Date: Thu, 1 Aug 2013 14:04:27 +0000 Subject: [PATCH] Correction to avoid memory leaks (links to 0021708: [CEA 586]). --- src/SMESH_I/SMESH_Gen_i_1.cxx | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index 0dfa3da68..685bd953e 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -262,7 +262,7 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, SALOMEDS::SObject_wrap SO = SMESH_Gen_i::ObjectToSObject( theStudy, theIOR ); SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); SALOMEDS::UseCaseBuilder_var useCaseBuilder = theStudy->GetUseCaseBuilder(); - SALOMEDS::SObject_var objAfter; + SALOMEDS::SObject_wrap objAfter; if ( SO->_is_nil() ) { if ( theTag == 0 ) { SO = aStudyBuilder->NewObject( theFatherObject ); @@ -273,15 +273,19 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, std::string anEntry; int last2Pnt_pos = -1; int tagAfter = -1; + CORBA::String_var entry; + SALOMEDS::SObject_wrap curObj; SALOMEDS::UseCaseIterator_var anUseCaseIter = useCaseBuilder->GetUseCaseIterator(theFatherObject); for ( ; anUseCaseIter->More(); anUseCaseIter->Next() ) { - anEntry = anUseCaseIter->Value()->GetID(); - last2Pnt_pos = anEntry.rfind( ":" ); - tagAfter = atoi( anEntry.substr( last2Pnt_pos+1 ).c_str() ); - if ( tagAfter > theTag ) { - theFatherObject->FindSubObject( tagAfter, objAfter.inout() ); - break; - } + curObj = anUseCaseIter->Value(); + entry = curObj->GetID(); + anEntry = entry.in(); + last2Pnt_pos = anEntry.rfind( ":" ); + tagAfter = atoi( anEntry.substr( last2Pnt_pos+1 ).c_str() ); + if ( tagAfter > theTag ) { + objAfter = curObj; + break; + } } } } @@ -313,7 +317,7 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, if ( !CORBA::is_nil( objAfter ) ) { useCaseBuilder->InsertBefore( SO, objAfter ); // insert at given tag } else if ( !useCaseBuilder->IsUseCaseNode( SO ) ) { - useCaseBuilder->AppendTo( SO->GetFather(), SO ); // append to the end of list + useCaseBuilder->AppendTo( theFatherObject, SO ); // append to the end of list } return SO._retn(); -- 2.39.2