8cde5d96a2
to old compilers that default to < C++11. (Explicitly passing CXXFLAGS_CXX11 into ExternalProject_breakpad wouldn't work well for now, as it would cause -Wregister error with -std=c++17 at workdir/UnpackedTarball/breakpad/src/common/dwarf/dwarf2reader.cc:878:43.) Change-Id: I1d04e0f05e36e2f9622991fb477f430a062fee0b
33 lines
1.3 KiB
Groff
33 lines
1.3 KiB
Groff
From caa6f1ea462d0f0c612b871106e3e309fe0290f5 Mon Sep 17 00:00:00 2001
|
|
From: Stephan Bergmann <sbergman@redhat.com>
|
|
Date: Thu, 16 Aug 2018 09:04:35 +0200
|
|
Subject: [PATCH] Handle race between ExceptionHandler::SignalHandler and
|
|
~ExceptionHandler
|
|
|
|
...where thread A is blocked locking g_handler_stack_mutex_ in SignalHandler
|
|
while thread B executes ~ExceptionHandler and sets g_handler_stack to null, but
|
|
which thread A didn't expect to be null once it acquired the lock.
|
|
---
|
|
src/client/linux/handler/exception_handler.cc | 6 ++++--
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/client/linux/handler/exception_handler.cc b/src/client/linux/handler/exception_handler.cc
|
|
index b895f6d7..4d58e510 100644
|
|
--- a/src/client/linux/handler/exception_handler.cc
|
|
+++ b/src/client/linux/handler/exception_handler.cc
|
|
@@ -372,8 +372,10 @@ void ExceptionHandler::SignalHandler(int sig, siginfo_t* info, void* uc) {
|
|
}
|
|
|
|
bool handled = false;
|
|
- for (int i = g_handler_stack_->size() - 1; !handled && i >= 0; --i) {
|
|
- handled = (*g_handler_stack_)[i]->HandleSignal(sig, info, uc);
|
|
+ if (g_handler_stack_ != NULL) {
|
|
+ for (int i = g_handler_stack_->size() - 1; !handled && i >= 0; --i) {
|
|
+ handled = (*g_handler_stack_)[i]->HandleSignal(sig, info, uc);
|
|
+ }
|
|
}
|
|
|
|
// Upon returning from this signal handler, sig will become unmasked and then
|
|
--
|
|
2.17.1
|
|
|