[Libreoffice-commits] online.git: common/SigUtil.cpp
Michael Meeks (via logerrit)
logerrit at kemper.freedesktop.org
Sat Jan 18 16:23:20 UTC 2020
common/SigUtil.cpp | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)
New commits:
commit b72f37826edf742eb7d9cf4fd0ac73b2a2e2096b
Author: Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Fri Jan 17 19:03:23 2020 +0000
Commit: Michael Meeks <michael.meeks at 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 <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Michael Meeks <michael.meeks at 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);
More information about the Libreoffice-commits
mailing list