From 2ce32f420acab4c52b34bacc2d221890b0598db0 Mon Sep 17 00:00:00 2001
From: Jan David Mol <mol@astron.nl>
Date: Sun, 18 Mar 2012 10:16:44 +0000
Subject: [PATCH] Task #2669: Force abort() on several fatal signals, because
 OpenMPI promises to do so but doesn't

---
 RTCP/IONProc/src/ION_main.cc | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/RTCP/IONProc/src/ION_main.cc b/RTCP/IONProc/src/ION_main.cc
index 98f384d78b3..b860b3bc4ad 100644
--- a/RTCP/IONProc/src/ION_main.cc
+++ b/RTCP/IONProc/src/ION_main.cc
@@ -219,10 +219,29 @@ static void enableCoreDumps()
 }
 
 
-static void ignoreSigPipe()
+static void abortHandler(int sig)
 {
+  (void)sig;
+
+  abort();
+}
+
+
+static void installSigHandlers()
+{
+  // ignore SIGPIPE
   if (signal(SIGPIPE, SIG_IGN) < 0)
     perror("warning: ignoring SIGPIPE failed");
+
+  // force abort() on a few signals, as OpenMPI appears to be broken in this regard
+  if (signal(SIGBUS, abortHandler) < 0)
+    perror("warning: rerouting SIGBUS failed");
+  if (signal(SIGSEGV, abortHandler) < 0)
+    perror("warning: rerouting SIGSEGV failed");
+  if (signal(SIGILL, abortHandler) < 0)
+    perror("warning: rerouting SIGILL failed");
+  if (signal(SIGFPE, abortHandler) < 0)
+    perror("warning: rerouting SIGFPE failed");
 }
 
 
@@ -272,7 +291,7 @@ static void master_thread()
   LOG_DEBUG("Master thread running");
 
   enableCoreDumps();
-  ignoreSigPipe();
+  installSigHandlers();
 
 #if defined CATCH_EXCEPTIONS
   try {
-- 
GitLab