Salome HOME
[EDF29150] : Fix bug at shutdown
[modules/kernel.git] / src / Launcher / SALOME_LogManager.cxx
index 6e106965e835104b7ae92f6cfb31f7ed0f068e41..f336d56a22c29e7c2b25c8ccbe7238aa4cb68eff 100644 (file)
@@ -193,13 +193,7 @@ Engines::ListOfContainerScriptExecPerfLog *SALOME_ContainerScriptPerfLog::listOf
 
 SALOME_ContainerPerfLog::~SALOME_ContainerPerfLog()
 {
-  for(auto script : _scripts)
-  {
-    PortableServer::ServantBase *serv = getPOA()->reference_to_servant(script);
-    PortableServer::ObjectId_var oid = getPOA()->reference_to_id(script);
-    getPOA()->deactivate_object(oid);
-  }
-  _scripts.clear();
+  this->destroyInternal();
 }
 
 PortableServer::POA_var SALOME_ContainerPerfLog::getPOA()
@@ -239,6 +233,23 @@ Engines::ListOfContainerScriptPerfLog *SALOME_ContainerPerfLog::listOfScripts()
   return ret._retn();
 }
 
+void SALOME_ContainerPerfLog::destroy()
+{
+  this->destroyInternal();
+}
+
+void SALOME_ContainerPerfLog::destroyInternal()
+{
+  _father->removeEntryBeforeDying( this );
+  for(auto script : _scripts)
+  {
+    PortableServer::ServantBase *serv = getPOA()->reference_to_servant(script);
+    PortableServer::ObjectId_var oid = getPOA()->reference_to_id(script);
+    getPOA()->deactivate_object(oid);
+  }
+  _scripts.clear();
+}
+
 void SALOME_ContainerPerfLog::accept(SALOME_VisitorContainerLog &visitor)
 {
   visitor.enterContainerPerfLog( *this );
@@ -400,6 +411,20 @@ char *SALOME_LogManager::getLastVersionOfFileNameLogger()
   return CORBA::string_dup( _safe_logger_file_holder.getLastVersionOfFileNameLogger().c_str() );
 }
 
+void SALOME_LogManager::removeEntryBeforeDying(SALOME_ContainerPerfLog *child)
+{
+  for(auto cont = _containers.begin() ; cont != _containers.end() ; ++cont )
+  {
+    PortableServer::ServantBase *serv = getPOA()->reference_to_servant(*cont);
+    SALOME_ContainerPerfLog *servCand = dynamic_cast<SALOME_ContainerPerfLog *>(serv);
+    if( servCand==child )
+      {
+        _containers.erase( cont );
+        break;
+      }
+  }
+}
+
 ///////////////////////
  
  #include <cstdint>