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