Salome HOME
Correction to avoid memory leaks (links to 0021708: [CEA 586]).
authorakl <akl@opencascade.com>
Thu, 1 Aug 2013 14:04:27 +0000 (14:04 +0000)
committerakl <akl@opencascade.com>
Thu, 1 Aug 2013 14:04:27 +0000 (14:04 +0000)
src/SMESH_I/SMESH_Gen_i_1.cxx

index 0dfa3da686f52a6870681ec5bb9676bc657d3bcb..685bd953ed968c574f3707c4becb2e05adaeaa5e 100644 (file)
@@ -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_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 );
   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;
       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() ) {
       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 ) ) {
   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();
   }
 
   return SO._retn();