]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Integrate patch from C.Caremoli : fix memory leaks
authorvsr <vsr@opencascade.com>
Mon, 21 Sep 2009 10:00:27 +0000 (10:00 +0000)
committervsr <vsr@opencascade.com>
Mon, 21 Sep 2009 10:00:27 +0000 (10:00 +0000)
src/CAM/CAM_Application.cxx
src/Qtx/QtxWorkstack.cxx
src/SalomeApp/SalomeApp_Application.cxx
src/SalomeApp/SalomeApp_DataObject.cxx
src/Session/SALOME_Session_Server.cxx
src/Session/Session_ServerThread.cxx

index b731d4c5770f956cf009adc0afc1a21ea4fa331e..61aa42d960222c9af1b1366763eb3eab9cbbb269 100755 (executable)
@@ -88,6 +88,8 @@ CAM_Application::CAM_Application( const bool autoLoad )
 */
 CAM_Application::~CAM_Application()
 {
+  for ( QList<CAM_Module*>::const_iterator it = myModules.begin(); it != myModules.end(); ++it )
+    delete *it;
 }
 
 /*! 
index bf888382bd62b9d23ad9968b04af8e2c2def5055..d9409bb513cb9c0272d21a5db5f37e6e52132d46 100644 (file)
@@ -1508,7 +1508,7 @@ void QtxWorkstackChild::childEvent( QChildEvent* e )
 */
 QtxWorkstackTabBar::QtxWorkstackTabBar( QWidget* parent )
 : QTabBar( parent ),
-  myId( -1 )
+  myId( -1 ),myActive(false)
 {
   setDrawBase( true );
   setElideMode( Qt::ElideNone );
index d03b3ac60340fc8d0c26591ed0873a0dbcfa19bb..bea36e500e2064d777bff1426d759250cb3d8a8e 100644 (file)
@@ -1078,15 +1078,15 @@ SALOMEDSClient_StudyManager* SalomeApp_Application::studyMgr()
 /*!Create and return SALOME_NamingService.*/
 SALOME_NamingService* SalomeApp_Application::namingService()
 {
-  static SALOME_NamingService* _ns = new SALOME_NamingService( orb() );
-  return _ns;
+  static SALOME_NamingService _ns(orb());
+  return &_ns;
 }
 
 /*!Create and return SALOME_LifeCycleCORBA.*/
 SALOME_LifeCycleCORBA* SalomeApp_Application::lcc()
 {
-  static SALOME_LifeCycleCORBA* _lcc = new SALOME_LifeCycleCORBA( namingService() );
-  return _lcc;
+  static SALOME_LifeCycleCORBA _lcc( namingService() );
+  return &_lcc;
 }
 
 /*!Return default engine IOR for light modules*/
index a05f501fac7559a1aca99cc041fc5108b95cc039..6db6c32ca460b10978a5221eb584384962df6911 100644 (file)
@@ -275,7 +275,7 @@ QString SalomeApp_DataObject::toolTip( const int /*id*/ ) const
       if ( !CORBA::is_nil(aComponent) && aComponent->hasObjectInfo() ) {
        LightApp_RootObject* aRoot = dynamic_cast<LightApp_RootObject*>( root() );
        if ( aRoot && aRoot->study() )
-         return QString( aComponent->getObjectInfo( aRoot->study()->id(), entry().toLatin1().constData()) );
+         return QString( (CORBA::String_var)aComponent->getObjectInfo( aRoot->study()->id(), entry().toLatin1().constData()) );
       }
     }
   }
index 46e753b137e3fb9c659af479cfc1bdac7e1518aa..a4f881c698ffa390d5c23c8fe6a0f2c37b2b4e1d 100755 (executable)
@@ -581,9 +581,6 @@ int main( int argc, char **argv )
   delete myServerLauncher;
   delete _NS;
 
-  PyGILState_STATE gstate = PyGILState_Ensure();
-  Py_Finalize();
-
   try  {
     orb->shutdown(0);
   }
@@ -597,8 +594,16 @@ int main( int argc, char **argv )
     // std::cerr << "Caught unexpected exception on destroy : ignored !!" << std::endl;
   }
 
+  PyGILState_STATE gstate = PyGILState_Ensure();
+  //Destroy orb from python (for chasing memory leaks)
+  //PyRun_SimpleString("from omniORB import CORBA");
+  //PyRun_SimpleString("orb=CORBA.ORB_init([''], CORBA.ORB_ID)");
+  //PyRun_SimpleString("orb.destroy()");
+  Py_Finalize();
+
   if ( shutdown )
     killOmniNames();
 
+  MESSAGE( "Salome_Session_Server:endofserver" );
   return result;
 }
index e46db7d48753915ffba0deeeb0d3a3ee4d5cb0f9..e8c804011304dcc9bcaa14832069b35de9b678b1 100755 (executable)
@@ -265,10 +265,11 @@ void Session_ServerThread::ActivateRegistry(int argc,
   const char *registryName = "Registry";
   Registry::Components_var varComponents;
   try {
-    RegistryService *ptrRegistry = SINGLETON_<RegistryService>::Instance();
+    RegistryService *ptrRegistry = new RegistryService;
     ptrRegistry->SessionName( ptrSessionName );
     ptrRegistry->SetOrb(_orb);
     varComponents = ptrRegistry->_this();
+    ptrRegistry->_remove_ref(); //let poa manage registry service deletion
     // The RegistryService must not already exist.
     
     try {
@@ -283,7 +284,6 @@ void Session_ServerThread::ActivateRegistry(int argc,
     }
     string absoluteName = string("/") + registryName;
     _NS->Register( varComponents , absoluteName.c_str() );
-    MESSAGE("On attend les requetes des clients");
   }
   catch( const SALOME_Exception &ex ) {
     INFOS( "Communication Error : " << ex.what() );