It's dangerous coding on Mondays.
authorJeff Cohen <jeffc@jolt-lang.org>
Tue, 2 Aug 2005 03:26:32 +0000 (03:26 +0000)
committerJeff Cohen <jeffc@jolt-lang.org>
Tue, 2 Aug 2005 03:26:32 +0000 (03:26 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22585 91177308-0d34-0410-b5e6-96231b3b80d8

lib/System/Win32/Signals.inc

index cf5cb40d4d0592eaa7fd82eee533dcf3192ac461..333e387dea1f699a19accd1184e6fc3cd611323d 100644 (file)
@@ -114,8 +114,8 @@ void sys::PrintStackTraceOnErrorSignal() {
 
 
 void sys::SetInterruptFunction(void (*IF)()) {
-  InterruptFunction = IF;
   RegisterHandler();
+  InterruptFunction = IF;
   LeaveCriticalSection(&CriticalSection);
 }
 }
@@ -239,6 +239,7 @@ static LONG WINAPI LLVMUnhandledExceptionFilter(LPEXCEPTION_POINTERS ep) {
 }
 
 static BOOL WINAPI LLVMConsoleCtrlHandler(DWORD dwCtrlType) {
+  // We are running in our very own thread, courtesy of Windows.
   EnterCriticalSection(&CriticalSection);
   Cleanup();
 
@@ -248,13 +249,9 @@ static BOOL WINAPI LLVMConsoleCtrlHandler(DWORD dwCtrlType) {
   InterruptFunction = 0;      // Don't run it on another CTRL-C.
 
   if (IF) {
-    try {
-      IF();                   // Run it now.
-    } catch (...) {
-      // Kill the process on an exception.
-      LeaveCriticalSection(&CriticalSection);
-      return FALSE;
-    }
+    // Note: if the interrupt function throws an exception, there is nothing
+    // to catch it in this thread so it will kill the process.
+    IF();                     // Run it now.
     LeaveCriticalSection(&CriticalSection);
     return TRUE;              // Don't kill the process.
   }