From fb3e8bc32b2291d3bb758efda8cf1f97094a23a6 Mon Sep 17 00:00:00 2001 From: Mike McLaughlin Date: Mon, 23 Jan 2023 14:47:02 -0800 Subject: [PATCH] Fix multiple dumps from being generated Issue: https://github.com/dotnet/runtime/issues/78956 After a core dump is generated because of a unhandled managed exception abort() is called but a SIGSEGV is generated in libpthread.so which is caught by the runtime and a second core dump is generated. The fix is to uninstall/uninitialize all the signal handlers, not just SIGABORT. --- src/coreclr/pal/src/exception/signal.cpp | 16 ---------------- src/coreclr/pal/src/include/pal/signal.hpp | 10 ---------- src/coreclr/pal/src/thread/process.cpp | 5 +++-- 3 files changed, 3 insertions(+), 28 deletions(-) diff --git a/src/coreclr/pal/src/exception/signal.cpp b/src/coreclr/pal/src/exception/signal.cpp index 7848e562509e74..7a109f6a1917ca 100644 --- a/src/coreclr/pal/src/exception/signal.cpp +++ b/src/coreclr/pal/src/exception/signal.cpp @@ -282,22 +282,6 @@ void SEHCleanupSignals() } } -/*++ -Function : - SEHCleanupAbort() - - Restore default SIGABORT signal handlers - - (no parameters, no return value) ---*/ -void SEHCleanupAbort() -{ - if (g_registered_signal_handlers) - { - restore_signal(SIGABRT, &g_previous_sigabrt); - } -} - /* internal function definitions **********************************************/ /*++ diff --git a/src/coreclr/pal/src/include/pal/signal.hpp b/src/coreclr/pal/src/include/pal/signal.hpp index a1b721b8fd3ce5..c5a1e276a05b53 100644 --- a/src/coreclr/pal/src/include/pal/signal.hpp +++ b/src/coreclr/pal/src/include/pal/signal.hpp @@ -117,14 +117,4 @@ Function : --*/ void SEHCleanupSignals(); -/*++ -Function : - SEHCleanupAbort() - - Restore default SIGABORT signal handlers - - (no parameters, no return value) ---*/ -void SEHCleanupAbort(); - #endif /* _PAL_SIGNAL_HPP_ */ diff --git a/src/coreclr/pal/src/thread/process.cpp b/src/coreclr/pal/src/thread/process.cpp index 22e0fe6eeceac8..2744c9867487b1 100644 --- a/src/coreclr/pal/src/thread/process.cpp +++ b/src/coreclr/pal/src/thread/process.cpp @@ -3440,8 +3440,9 @@ PROCAbort(int signal) PROCCreateCrashDumpIfEnabled(signal); - // Restore the SIGABORT handler to prevent recursion - SEHCleanupAbort(); + // Restore all signals; the SIGABORT handler to prevent recursion and + // the others to prevent multiple core dumps from being generated. + SEHCleanupSignals(); // Abort the process after waiting for the core dump to complete abort();