]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
CCAR: catch all exceptions in qt handler
authorcaremoli <caremoli>
Thu, 27 Jan 2011 10:57:06 +0000 (10:57 +0000)
committercaremoli <caremoli>
Thu, 27 Jan 2011 10:57:06 +0000 (10:57 +0000)
and abort session server if exception has been caught in orb shutdown

src/Session/SALOME_Session_Server.cxx

index 507c399921759d796b8326bf0bcca2a24caad040..851557ce0797db5e948fa385d1be6a377d7f3e55 100755 (executable)
@@ -290,8 +290,18 @@ public:
     return myHandler ? myHandler->handle( receiver, e ) :
       TestApplication::notify( receiver, e );
 #else
-    return myHandler ? myHandler->handle( receiver, e ) :
-      QApplication::notify( receiver, e );
+    try
+      {
+        return myHandler ? myHandler->handle( receiver, e ) : QApplication::notify( receiver, e );
+      }
+    catch(std::exception& e)
+      {
+        std::cerr << e.what()  << std::endl;
+      }
+    catch(...)
+      {
+        std::cerr << "Unknown exception caught in Qt handler: it's probably a bug in SALOME platform" << std::endl;
+      }
 #endif
   }
   SUIT_ExceptionHandler* handler() const { return myHandler; }
@@ -604,7 +614,10 @@ int main( int argc, char **argv )
     // exception is raised when orb->destroy() is called and
     // cpp continer is launched in the embedded mode
     //////////////////////////////////////////////////////////////
-    // std::cerr << "Caught unexpected exception on destroy : ignored !!" << std::endl;
+    // std::cerr << "Caught unexpected exception on shutdown : ignored !!" << std::endl;
+    if ( shutdown )
+      killOmniNames();
+    abort(); //abort program to avoid deadlock in destructors or atexit when shutdown has been interrupted
   }
 
   PyGILState_Ensure();