common/SigUtil.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-)
New commits: commit b72f37826edf742eb7d9cf4fd0ac73b2a2e2096b Author: Michael Meeks <michael.me...@collabora.com> AuthorDate: Fri Jan 17 19:03:23 2020 +0000 Commit: Michael Meeks <michael.me...@collabora.com> CommitDate: Sat Jan 18 17:23:02 2020 +0100 sighandler: break infinite loop with corrupted heap ignoring the segv can lead to not making progress, while churning debug. Change-Id: I97af266cec3feefe2dcbd9adb8dbf4b13a4d69bd Reviewed-on: https://gerrit.libreoffice.org/c/online/+/87002 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Michael Meeks <michael.me...@collabora.com> diff --git a/common/SigUtil.cpp b/common/SigUtil.cpp index 8fe38b721..881326df5 100644 --- a/common/SigUtil.cpp +++ b/common/SigUtil.cpp @@ -237,19 +237,16 @@ namespace SigUtil void handleFatalSignal(const int signal) { SigHandlerTrap guard; - if (!guard.isExclusive()) - { - Log::signalLogPrefix(); - Log::signalLog(" Fatal double signal received: "); - Log::signalLog(signalName(signal)); - Log::signalLog("\n Already handling a signal; will ignore this."); - return; - } + bool bReEntered = !guard.isExclusive(); Log::signalLogPrefix(); - Log::signalLog(" Fatal signal received: "); + + // Heap corruption can re-enter through backtrace. + if (bReEntered) + Log::signalLog(" Fatal double signal received: "); + else + Log::signalLog(" Fatal signal received: "); Log::signalLog(signalName(signal)); - Log::signalLog("\n"); struct sigaction action; @@ -259,7 +256,8 @@ namespace SigUtil sigaction(signal, &action, nullptr); - dumpBacktrace(); + if (!bReEntered) + dumpBacktrace(); // let default handler process the signal kill(getpid(), signal); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits