]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
Fix for Bug PAL11170
authorapo <apo@opencascade.com>
Fri, 3 Mar 2006 12:22:40 +0000 (12:22 +0000)
committerapo <apo@opencascade.com>
Fri, 3 Mar 2006 12:22:40 +0000 (12:22 +0000)
   SIGSEGV when "extrusion along a path" gives no result

src/CASCatch/CASCatch_CatchSignals.cxx
src/CASCatch/CASCatch_CatchSignals.hxx
src/CASCatch/Makefile.in

index 9d4d5621abbea556d623e4482ac22f45205471a7..ef64144c6c8d595c1f6f016f3bf6e5f7da129cdd 100644 (file)
@@ -19,8 +19,6 @@
 //
 #include "CASCatch_CatchSignals.hxx"
 
-#include "CASCatch_Failure.hxx"  
-#include "CASCatch_ErrorHandler.hxx"
 #include <TCollection_AsciiString.hxx>
 
 #define MAX_HANDLER_NUMBER 6
  * \brief creates a CASCatch_CatchSignals
  */
 //================================================================================ 
-CASCatch_CatchSignals::CASCatch_CatchSignals(
-     :myIsActivated(Standard_False)
+CASCatch_CatchSignals::CASCatch_CatchSignals(Standard_Boolean theIsActivate):
+  myIsActivated(Standard_False)
 {
-
   Standard_Integer i = 0;
   for(; i<=MAX_HANDLER_NUMBER; i++)
     mySigStates[i] = NULL;
+  
+  if(theIsActivate)
+    Activate();
 }
 
 #ifndef WNT
@@ -112,7 +112,7 @@ static void Handler(const OSD_Signals theSig, const OSD_Signals)
   TCollection_AsciiString aMessage(theSig);  
   aMessage+=" signal detected";
  
-  CASCatch_Failure::Raise(aMessage.ToCString());
+  Standard_Failure::Raise(aMessage.ToCString());
 }
 
 
@@ -129,7 +129,7 @@ static void SegvHandler(const OSD_Signals, const Standard_Address, const Standar
   sigaddset(&set, SIGSEGV);
   sigprocmask (SIG_UNBLOCK, &set, NULL); 
 
-  CASCatch_Failure::Raise("SIGSEGV detected");
+  Standard_Failure::Raise("SIGSEGV detected");
 }
 #endif
 
@@ -234,7 +234,7 @@ static Standard_Integer WntHandler(const Standard_Address theExceptionInfo)
   TCollection_AsciiString aMessage((Standard_Integer)dwExceptionCode);  
   aMessage+=" Exception code - unexpected exception";
 
-  CASCatch_Failure::Raise(aMessage.ToCString());
+  Standard_Failure::Raise(aMessage.ToCString());
 
   return EXCEPTION_EXECUTE_HANDLER;
 }
@@ -260,15 +260,15 @@ static void SIGWntHandler(const int signum , const int theCode)
     OLDSIGWNTHANDLER = signal( signum , SIGWNTHANDLER ); 
 
     if(theCode == _FPE_UNDERFLOW || theCode == _FPE_INEXACT) return;
-    CASCatch_Failure::Raise ("Floating point error"); 
+    Standard_Failure::Raise ("Floating point error"); 
     break;
   case SIGSEGV : 
     OLDSIGWNTHANDLER = signal( signum , SIGWNTHANDLER );
-    CASCatch_Failure::Raise("Access violation"); 
+    Standard_Failure::Raise("Access violation"); 
     break; 
   case SIGILL : 
     OLDSIGWNTHANDLER = signal( signum , SIGWNTHANDLER );
-    CASCatch_Failure::Raise("Illegal instruction" ); 
+    Standard_Failure::Raise("Illegal instruction" ); 
     break; 
   }
 }
index e2293f3e18e0323e5790d6adf3a8f01749213289..1e56f54b56e40e42bef498e01f5992980726e36a 100644 (file)
@@ -22,6 +22,8 @@
 #define _CASCatch_CatchSignals_HeaderFile
 
 #include <Standard.hxx>
+#include <Standard_Failure.hxx>
+#include <Standard_ErrorHandler.hxx>
 
 /*!
  * \class CASCatch_CatchSignals
@@ -34,7 +36,7 @@ public:
 
  // Methods PUBLIC
  // 
-Standard_EXPORT CASCatch_CatchSignals();
+Standard_EXPORT CASCatch_CatchSignals(Standard_Boolean theIsActivate = Standard_True);
 Standard_EXPORT void Destroy() ;
 ~CASCatch_CatchSignals() { Destroy(); }
 Standard_EXPORT void Activate() ;
@@ -60,4 +62,31 @@ Standard_Boolean myIsActivated;
 };
 
 
+#ifdef try
+#  undef try
+#endif
+
+#ifdef catch
+#  undef catch
+#endif
+
+#ifdef NO_CXX_EXCEPTION
+#  if defined(DO_ABORT)
+#    define CASCatch_TRY \
+       Standard_ErrorHandler _Function; \
+       K_SETJMP = 1 ; \
+       if(DoesNotAbort(_Function))
+#   else  //If DO_ABORT is not defined
+#     define CASCatch_TRY \
+        Standard_ErrorHandler _Function; \
+        if(DoesNotAbort(_Function))
+#   endif //DO_ABORT
+#   define CASCatch_CATCH(Error)   \
+      else if(_Function.Catches(STANDARD_TYPE(Error)))
+#else
+#  define CASCatch_TRY try
+#  define CASCatch_CATCH catch
+#endif //NO_CXX_EXCEPTION
+
+
 #endif
index f3477a8a5777f28777512231e55a198370ce2bde..9e77d0caf9e99d1b84ccdc1b42649fe0c9eb29f1 100644 (file)
@@ -11,21 +11,19 @@ VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_srcdir)/idl
 @COMMENCE@
 
 # header files  
-EXPORT_HEADERS= CASCatch_Failure.hxx \
-               CASCatch_CatchSignals.hxx \
-               CASCatch_ErrorHandler.hxx
+EXPORT_HEADERS= CASCatch_CatchSignals.hxx
+               # CASCatch_Failure.hxx \
+               CASCatch_ErrorHandler.hxx
 
 # Libraries targets
 LIB = libCASCatch.la 
 
-LIB_SRC = CASCatch_Failure.cxx \
-          CASCatch_ErrorHandler.cxx \
-          CASCatch_CatchSignals.cxx
+LIB_SRC = CASCatch_CatchSignals.cxx
+         # CASCatch_Failure.cxx \
+          # CASCatch_ErrorHandler.cxx
 
 CPPFLAGS += $(OCC_INCLUDES)
 CXXFLAGS += $(OCC_CXXFLAGS)
 LDFLAGS+= $(CAS_KERNEL) $(CAS_MATH)
 
-@CONCLUDE@
-
-
+@CONCLUDE@
\ No newline at end of file