diff --git a/RTCP/IONProc/src/ION_main.cc b/RTCP/IONProc/src/ION_main.cc index 98f384d78b35f5c7cd984519195c60a73e8dce66..b860b3bc4ada2e67ff1e8d7781e32be16897124d 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 {