瀏覽代碼

HPCC-14749 Ensure HPCC generates core dump if abort condition sensed.

Add SIGBABRT to handled signals set.

Ensure to create core dump after we caught an abort like signal.

Update after review

Signed-off-by: Attila Vamos <attila.vamos@gmail.com>
Attila Vamos 9 年之前
父節點
當前提交
2e04ca2d2b
共有 4 個文件被更改,包括 17 次插入5 次删除
  1. 3 1
      ecl/eclagent/eclagent.cpp
  2. 1 1
      ecl/eclagent/eclagent.ipp
  3. 2 1
      roxie/ccd/ccdmain.cpp
  4. 11 2
      system/jlib/jexcept.cpp

+ 3 - 1
ecl/eclagent/eclagent.cpp

@@ -3113,7 +3113,9 @@ void EclAgent::fatalAbort(bool userabort,const char *excepttext)
 #ifdef _WIN32
     TerminateProcess(GetCurrentProcess(), 1);
 #else
-    kill(getpid(), SIGKILL);
+   if (userabort)
+       kill(getpid(), SIGKILL);
+
 #endif
 }
 

+ 1 - 1
ecl/eclagent/eclagent.ipp

@@ -424,7 +424,7 @@ private:
             StringBuffer text;
             e->errorMessage(text);
             parent.fatalAbort(false,text.str());
-            return true; // won't return hopefully!
+            return false; // It returns to excsighandler() to abort!
         }
     } *abortmonitor;
 

+ 2 - 1
roxie/ccd/ccdmain.cpp

@@ -374,7 +374,7 @@ public:
         {
             socketListeners.item(idx).stopListening();
         }
-        return false;
+        return false; // It returns to excsighandler() to abort!
     }
 } abortHandler;
 
@@ -1004,6 +1004,7 @@ int STARTQUERY_API start_query(int argc, const char *argv[])
         tmpFlag |= _CRTDBG_CHECK_ALWAYS_DF;
         _CrtSetDbgFlag( tmpFlag );
 #endif
+        EnableSEHtoExceptionMapping();
         setSEHtoExceptionHandler(&abortHandler);
         if (runOnce)
         {

+ 11 - 2
system/jlib/jexcept.cpp

@@ -993,6 +993,7 @@ void excsighandler(int signum, siginfo_t *info, void *extra)
     signal(SIGBUS, SIG_DFL);
     signal(SIGILL, SIG_DFL);
     signal(SIGFPE, SIG_DFL);
+    signal(SIGABRT, SIG_DFL);
 #endif
     StringBuffer s;
 
@@ -1200,8 +1201,14 @@ void excsighandler(int signum, siginfo_t *info, void *extra)
     *spp = ip;
     sigsegv_exc = new CSEHException(signum,s.str());
 #else
-    if (SEHHandler && SEHHandler->fireException(new CSEHException(signum,s.str()))) 
-        return;
+    if (SEHHandler)
+    {
+        if ( SEHHandler->fireException(new CSEHException(signum,s.str())) )
+            return;
+        else
+            kill(getpid(), SIGABRT);
+    }
+
 #endif
     nested--;
 }
@@ -1264,6 +1271,7 @@ void jlib_decl enableSEHtoExceptionMapping()
     sigaction(SIGILL, &act, NULL);
     sigaction(SIGBUS, &act, NULL);
     sigaction(SIGFPE, &act, NULL);
+    sigaction(SIGABRT, &act, NULL);
 #endif
 }
 
@@ -1286,6 +1294,7 @@ void  jlib_decl disableSEHtoExceptionMapping()
     signal(SIGBUS, SIG_DFL);
     signal(SIGILL, SIG_DFL);
     signal(SIGFPE, SIG_DFL);
+    signal(SIGABRT, SIG_DFL);
 #endif
 }