no-longjmp-20040323
authorJeffrey Altman <jaltman@mit.edu>
Wed, 24 Mar 2004 08:27:36 +0000 (08:27 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Wed, 24 Mar 2004 08:27:36 +0000 (08:27 +0000)
Do not use setjmp/longjmp in multithreaded code.  It will destroy the stack.

src/WINNT/afsd/afsd_service.c

index c136ac4..5580be9 100644 (file)
@@ -44,8 +44,10 @@ HANDLE WaitToTerminate;
 
 int GlobalStatus;
 
+#ifdef JUMP
 unsigned int MainThreadId;
 jmp_buf notifier_jmp;
+#endif /* JUMP */
 
 extern int traceOnPanic;
 extern HANDLE afsi_file;
@@ -89,9 +91,11 @@ static void afsd_notifier(char *msgp, char *filep, long line)
 
        SetEvent(WaitToTerminate);
 
+#ifdef JUMP
        if (GetCurrentThreadId() == MainThreadId)
                longjmp(notifier_jmp, 1);
        else
+#endif /* JUMP */
                ExitThread(1);
 }
 
@@ -402,10 +406,13 @@ void afsd_Main(DWORD argc, LPTSTR *argv)
         }
     }
 
+#ifdef JUMP
     MainThreadId = GetCurrentThreadId();
        jmpret = setjmp(notifier_jmp);
 
-       if (jmpret == 0) {
+       if (jmpret == 0) 
+#endif /* JUMP */
+    {
                code = afsd_InitCM(&reason);
                if (code != 0)
                        osi_panic(reason, __FILE__, __LINE__);