]> OCCT Git - occt.git/commitdiff
0022730: Print available info about exception missed in some cases
authorkgv <kgv@opencascade.com>
Tue, 6 Mar 2012 07:55:39 +0000 (11:55 +0400)
committerbugmaster <bugmaster@opencascade.com>
Tue, 6 Mar 2012 11:09:43 +0000 (15:09 +0400)
src/Standard/Standard_ErrorHandler.cdl
src/Standard/Standard_ErrorHandler.cxx
src/Standard/Standard_Failure.cxx

index 002ef9c4919188f794955cabe5e1309b5d55679f..bc518254969524b3eb56eb8b8b91a40c516d19f7 100755 (executable)
@@ -37,15 +37,15 @@ is
        ---C++: inline
        ---C++: return &
        ---Level: Advanced
-    
-    Abort(myclass) is private;
-       ---Purpose: A exception is raised but it is not yet caught. 
-       --          So Abort the current function and transmit the exception 
-        --          to "calling routines".
-       -- Warning: If no catch is prepared for this exception, it displays the
-       --          exception name and calls "exit(1)".
-       ---Level: Internal
-       
+
+    Abort(myclass; theError : Failure) is private;
+    ---Purpose: A exception is raised but it is not yet caught.
+    --          So Abort the current function and transmit the exception
+    --          to "calling routines".
+    -- Warning: If no catch is prepared for this exception, it displays the
+    --          exception name and calls "exit(1)".
+    ---Level: Internal
+
     Error(me) returns Failure;
        ---Purpose: Returns the current Error.
 
index 891082e8a8187e14d80a866fef08ebdfc002ab35..9f3f69933dd7007b25c8a02ba3e581c689607aab 100755 (executable)
@@ -66,9 +66,10 @@ Standard_ErrorHandler::Standard_ErrorHandler () :
 void Standard_ErrorHandler::Destroy()
 {
   Unlink();
-  if(myStatus==Standard_HandlerJumped) {
-    //jumped, but not caut
-    Abort();
+  if (myStatus == Standard_HandlerJumped)
+  {
+    // jumped, but not caught
+    Abort (myCaughtError);
   }
 }
 
@@ -138,21 +139,18 @@ Standard_Boolean Standard_ErrorHandler::IsInTryBlock()
 //====    Abort if there is a non null 'Error'
 //============================================================================
 
-void Standard_ErrorHandler::Abort ()
+void Standard_ErrorHandler::Abort (const Handle(Standard_Failure)& theError)
 {
   Standard_ErrorHandler* anActive = FindHandler(Standard_HandlerVoid, Standard_True);
-    
+
   //==== Check if can do the "longjmp" =======================================
   if(anActive == NULL || anActive->myLabel == NULL) {
     cerr << "*** Abort *** an exception was raised, but no catch was found." << endl;
-    Handle(Standard_Failure) anErr = 
-      ( anActive != NULL && ! anActive->myCaughtError.IsNull() ?
-        anActive->myCaughtError : Standard_Failure::Caught() );
-    if ( ! anErr.IsNull() )
-      cerr << "\t... The exception is:" << anErr->GetMessageString() << endl;
+    if (!theError.IsNull())
+      cerr << "\t... The exception is:" << theError->GetMessageString() << endl;
     exit(1);
   }
-  
+
   anActive->myStatus = Standard_HandlerJumped;
   longjmp(anActive->myLabel, Standard_True);
 }
@@ -196,15 +194,14 @@ Handle(Standard_Failure) Standard_ErrorHandler::Error() const
 }
 
 
-void Standard_ErrorHandler::Error(const Handle(Standard_Failure)& aError)
+void Standard_ErrorHandler::Error (const Handle(Standard_Failure)& theError)
 {
-  Standard_ErrorHandler* anActive = FindHandler(Standard_HandlerVoid, Standard_False);
-  if(anActive==0)
-    Abort();
-  
-  anActive->myCaughtError = aError;
-}
+  Standard_ErrorHandler* anActive = FindHandler (Standard_HandlerVoid, Standard_False);
+  if (anActive == NULL)
+    Abort (theError);
 
+  anActive->myCaughtError = theError;
+}
 
 
 Standard_ErrorHandler* Standard_ErrorHandler::FindHandler(const Standard_HandlerStatus theStatus,
index a208c6d1ae490638c938e55efe8b47fa2bd4cb2a..93eede389a0e80a9a8d8ea30395f8982d9048870 100755 (executable)
@@ -138,8 +138,8 @@ void Standard_Failure::Reraise (const Standard_SStream& AReason)
 void Standard_Failure::Reraise () 
 {
 #ifdef NO_CXX_EXCEPTION
-  Standard_ErrorHandler::Error(this) ;
-  Standard_ErrorHandler::Abort();
+  Standard_ErrorHandler::Error (this);
+  Standard_ErrorHandler::Abort (this);
 #else
   RaisedError = this;
   Throw();
@@ -149,8 +149,8 @@ void Standard_Failure::Reraise ()
 void Standard_Failure::Jump() const 
 {
 #if defined (NO_CXX_EXCEPTION) || defined (OCC_CONVERT_SIGNALS)
-  Standard_ErrorHandler::Error(this) ;
-  Standard_ErrorHandler::Abort();
+  Standard_ErrorHandler::Error (this);
+  Standard_ErrorHandler::Abort (this);
 #else
   RaisedError = this;
   Throw();