Index: tclWinThrd.c =================================================================== RCS file: /cvsroot/tcl/tcl/win/tclWinThrd.c,v retrieving revision 1.11 diff -c -r1.11 tclWinThrd.c *** tclWinThrd.c 2000/06/13 20:30:24 1.11 --- tclWinThrd.c 2001/04/25 06:44:59 *************** *** 136,143 **** EnterCriticalSection(&joinLock); code = _beginthreadex(NULL, (unsigned) stackSize, proc, clientData, 0, ! (unsigned *)idPtr); if (code == 0) { LeaveCriticalSection(&joinLock); --- 136,156 ---- EnterCriticalSection(&joinLock); + #if !defined(__GNUC__) || (defined(__GNUC__) && defined(__MSVCRT__)) code = _beginthreadex(NULL, (unsigned) stackSize, proc, clientData, 0, ! (unsigned *)idPtr); ! #else ! /* ! * MS CRTDLL runtime, one of two supported GCC/Mingw, does not support ! * the _beginthreadex and _endthreadex interfaces, and we resort to using ! * Win32 API CreateThread and ExitThread interfaces instead. A side ! * effect is that there is a potential resource leak after each thread ! * exits. ! */ ! ! code = (unsigned long) CreateThread(NULL, (unsigned) stackSize, proc, ! clientData, 0, (DWORD *)idPtr); ! #endif if (code == 0) { LeaveCriticalSection(&joinLock); *************** *** 200,209 **** int status; { EnterCriticalSection(&joinLock); ! TclSignalExitThread (Tcl_GetCurrentThread (), status); LeaveCriticalSection(&joinLock); _endthreadex((DWORD)status); } --- 213,226 ---- int status; { EnterCriticalSection(&joinLock); ! TclSignalExitThread (Tcl_GetCurrentThread(), status); LeaveCriticalSection(&joinLock); + #if !defined(__GNUC__) || (defined(__GNUC__) && defined(__MSVCRT__)) _endthreadex((DWORD)status); + #else + ExitThread((DWORD)status); + #endif }