From 5cf8fc1d99460d3d7a99bf0950b7e8f6852515e7 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Wed, 24 Mar 2004 08:27:36 +0000 Subject: [PATCH] no-longjmp-20040323 Do not use setjmp/longjmp in multithreaded code. It will destroy the stack. --- src/WINNT/afsd/afsd_service.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/WINNT/afsd/afsd_service.c b/src/WINNT/afsd/afsd_service.c index c136ac40d..5580be92b 100644 --- a/src/WINNT/afsd/afsd_service.c +++ b/src/WINNT/afsd/afsd_service.c @@ -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__); -- 2.39.5