From: Jeffrey Altman Date: Wed, 24 Mar 2004 08:27:36 +0000 (+0000) Subject: no-longjmp-20040323 X-Git-Tag: openafs-devel-1_3_62~8 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=5cf8fc1d99460d3d7a99bf0950b7e8f6852515e7;p=packages%2Fo%2Fopenafs.git no-longjmp-20040323 Do not use setjmp/longjmp in multithreaded code. It will destroy the stack. --- 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__);