diff options
author | davygrvy <davygrvy@noemail.net> | 2004-04-23 07:11:26 (GMT) |
---|---|---|
committer | davygrvy <davygrvy@noemail.net> | 2004-04-23 07:11:26 (GMT) |
commit | b2fa04737021fde9d56e3177fd8d99b80a780e55 (patch) | |
tree | e17ec1ad16e823b582ad5973ba659e42538c6ed6 /win/tclWinThrd.c | |
parent | 2e23dd925f662184753fed50207c050fab8bb32a (diff) | |
download | tcl-b2fa04737021fde9d56e3177fd8d99b80a780e55.zip tcl-b2fa04737021fde9d56e3177fd8d99b80a780e55.tar.gz tcl-b2fa04737021fde9d56e3177fd8d99b80a780e55.tar.bz2 |
* win/tclWinTime.c: If the Tcl_ExitProc (StopCalibration) is
called from the stack frame of DllMain's PROCESS_DETACH, the
wait operation should timeout and continue.
FossilOrigin-Name: c11c33246aa87194acf6000a49c92340013e0042
Diffstat (limited to 'win/tclWinThrd.c')
-rw-r--r-- | win/tclWinThrd.c | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/win/tclWinThrd.c b/win/tclWinThrd.c index 208f066..8d738b3 100644 --- a/win/tclWinThrd.c +++ b/win/tclWinThrd.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: tclWinThrd.c,v 1.24.2.2 2003/05/13 09:57:40 mistachkin Exp $ + * RCS: @(#) $Id: tclWinThrd.c,v 1.24.2.3 2004/04/23 07:11:26 davygrvy Exp $ */ #include "tclWinInt.h" @@ -25,6 +25,7 @@ static CRITICAL_SECTION masterLock; static int init = 0; +static int allocOnce = 0; #define MASTER_LOCK EnterCriticalSection(&masterLock) #define MASTER_UNLOCK LeaveCriticalSection(&masterLock) @@ -393,18 +394,46 @@ Tcl_Mutex * Tcl_GetAllocMutex() { #ifdef TCL_THREADS - static int once = 0; - - if (!once) { + if (!allocOnce) { InitializeCriticalSection(&allocLock); - once = 1; + allocOnce = 1; } return &allocLockPtr; #else return NULL; #endif } + +/* + *---------------------------------------------------------------------- + * + * TclpFinalizeLock + * + * This procedure is used to destroy all private resources used in + * this file. + * + * Results: + * None. + * + * Side effects: + * Destroys everything private. TclpInitLock must be held + * entering this function. + * + *---------------------------------------------------------------------- + */ +void +TclFinalizeLock () +{ + MASTER_LOCK; + DeleteCriticalSection(&joinLock); + DeleteCriticalSection(&masterLock); + init = 0; + DeleteCriticalSection(&allocLock); + allocOnce = 0; + /* Destroy the critical section that we are holding. */ + DeleteCriticalSection(&initLock); +} #ifdef TCL_THREADS |