Fixes a hang that can occur if a signal comes in during malloc calls.
authorChris Bieneman <beanz@apple.com>
Mon, 27 Apr 2015 20:45:35 +0000 (20:45 +0000)
committerChris Bieneman <beanz@apple.com>
Mon, 27 Apr 2015 20:45:35 +0000 (20:45 +0000)
We need to dereference the signals mutex during handler registration so that we force its construction. This is to prevent the first use being during handling an actual signal because you can't safely allocate memory in a signal handler.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235914 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/Unix/Signals.inc

index 057bcab16002d7d8ad3564b8860dd45396c9eca7..e7696c2f7eec622ec133f0391dc5c8167ea893e3 100644 (file)
@@ -112,6 +112,12 @@ static void RegisterHandler(int Signal) {
 }
 
 static void RegisterHandlers() {
+  // We need to dereference the signals mutex during handler registration so
+  // that we force its construction. This is to prevent the first use being
+  // during handling an actual signal because you can't safely call new in a
+  // signal handler.
+  *SignalsMutex;
+  
   // If the handlers are already registered, we're done.
   if (NumRegisteredSignals != 0) return;