Prevent hang due to HandleUnexpectedSignal reentry
Change-Id: I0fe6a9b642e8d866aba893906c36bca6f1a4334e
diff --git a/src/runtime_linux.cc b/src/runtime_linux.cc
index 430c70f..72989a6 100644
--- a/src/runtime_linux.cc
+++ b/src/runtime_linux.cc
@@ -227,7 +227,15 @@
mcontext_t& context;
};
-static void HandleUnexpectedSignal(int signal_number, siginfo_t* info, void* raw_context) {
+void HandleUnexpectedSignal(int signal_number, siginfo_t* info, void* raw_context) {
+ static bool handlingUnexpectedSignal = false;
+ if (handlingUnexpectedSignal) {
+ LogMessageData data(__FILE__, __LINE__, INTERNAL_FATAL, -1);
+ LogMessage::LogLine(data, "HandleUnexpectedSignal reentered\n");
+ _exit(1);
+ }
+ handlingUnexpectedSignal = true;
+
gAborting = true; // set before taking any locks
MutexLock mu(Thread::Current(), *Locks::unexpected_signal_lock_);