]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
Some addtional comments
authorrahuel <rahuel@opencascade.com>
Thu, 9 Dec 2004 13:33:19 +0000 (13:33 +0000)
committerrahuel <rahuel@opencascade.com>
Thu, 9 Dec 2004 13:33:19 +0000 (13:33 +0000)
src/Container/Container_i.cxx

index 9883a9f75920d00e9a842d8b15f7f5ea807b9c5e..dc07e7eb0a4a4feac3287de5fb8d4785926fe7d6 100644 (file)
@@ -546,12 +546,12 @@ void SigIntHandler(int what , siginfo_t * siginfo ,
               siginfo->si_signo == SIGBUS ) {
 //      cout << "Engines_Container_i(SigIntHandler) Signal = " << signame.c_str()
 //           << " was cautch!" << endl ;
-      if ( k_setjmp ) {
+      if ( k_setjmp ) { // Python function in SuperVisionContainer
         ActSigIntHandler() ;
         longjmp( jmp_env , 1 ) ;
         k_setjmp = false ;
       }
-      else {
+      else { // C++ method in any Container
         throw std::runtime_error(signame);
       }
     }
@@ -608,7 +608,12 @@ void Engines_Container_i::WaitPythonFunction() {
     WaitActivatePythonExecution() ;
     cout << pthread_self() << "Engines_Container_i::WaitActivatedPythonExecution" << endl ;
 
-    if ( setjmp( jmp_env ) == 0 ) {
+    // setjmp() returns 0 if it was called for the 1st time.  Here we store the current
+    // position of stack in jmp_env.  IF an exception happens (SIGSEGV, etc.), then,
+    // using longjmp(), we will be HERE again.  But setjmp() will return NON-zero value
+    // in this case.  So it it's non-zero, then SIGxxx already happened and we must report
+    // error and continue running.
+    if ( setjmp( jmp_env ) == 0 ) { 
       k_setjmp = true ;
       if ( _InitPyRunMethod ) {
         cout << pthread_self() << "Engines_Container_i::WaitPythonFunction --> Py_InitModule"  << endl ;