From d361604df94801ca13f7925809f1fc4627a25a45 Mon Sep 17 00:00:00 2001 From: davygrvy Date: Thu, 11 Dec 2003 03:32:05 +0000 Subject: (WishPanic) : placed ExitProcess() in a __try block (SEH) to catch any exceptions that might happen. As Tcl will call Tcl_Finalize from its DllMain due to the unload from ExitProcess() unloading Tcl, and if Tcl_Panic had gotten called in an __except block, this avoid the possibility of not being able to exit. Falls to TerminateProcess() in the __except case. Removed the #ifdef _MSC_VER around DebugBreak as that function exists in kernel32.dll and is not compiler dependent. I'd prefer to use if (IsDebuggerPresent()) DebugBreak(); but IsDebuggerPresent() isn't available in all kernel32.dll modules for all versions of windows. --- win/winMain.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/win/winMain.c b/win/winMain.c index edfd42f..1f4392f 100644 --- a/win/winMain.c +++ b/win/winMain.c @@ -9,7 +9,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: winMain.c,v 1.15 2002/11/04 07:49:43 davygrvy Exp $ + * RCS: @(#) $Id: winMain.c,v 1.15.2.1 2003/12/11 03:32:05 davygrvy Exp $ */ #include @@ -239,10 +239,12 @@ WishPanic TCL_VARARGS_DEF(CONST char *,arg1) MessageBeep(MB_ICONEXCLAMATION); MessageBox(NULL, buf, "Fatal Error in Wish", MB_ICONSTOP | MB_OK | MB_TASKMODAL | MB_SETFOREGROUND); -#ifdef _MSC_VER DebugBreak(); -#endif - ExitProcess(1); + __try { + ExitProcess(EXIT_FAILURE); + } __except (EXCEPTION_EXECUTE_HANDLER) { + TerminateProcess(GetCurrentProcess(), EXIT_FAILURE); + } } /* *------------------------------------------------------------------------- -- cgit v0.12