diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2015-10-18 10:34:30 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2015-10-18 10:34:30 (GMT) |
commit | 602a687e5116fe133efb686f83f92cb108429306 (patch) | |
tree | c1df46a3998eaf31e71fe8a4982b582201888b5e /win | |
parent | 3163979b3cb394f9d2107c244d0bfc1a7dbc012c (diff) | |
parent | b22ebcce6b9f2e861a4c9fed13421df0c76769d6 (diff) | |
download | tcl-602a687e5116fe133efb686f83f92cb108429306.zip tcl-602a687e5116fe133efb686f83f92cb108429306.tar.gz tcl-602a687e5116fe133efb686f83f92cb108429306.tar.bz2 |
Bring back Tcl_MutexLock() to exact implementation in Tcl 8.6.4. For details, see [ba44e415a0]: Use of mutexLock causes problem with reactive event handling in AndroWish
Diffstat (limited to 'win')
-rw-r--r-- | win/tclWinThrd.c | 37 |
1 files changed, 2 insertions, 35 deletions
diff --git a/win/tclWinThrd.c b/win/tclWinThrd.c index ae7ce80..1c9d483 100644 --- a/win/tclWinThrd.c +++ b/win/tclWinThrd.c @@ -24,16 +24,6 @@ _CRTIMP unsigned int __cdecl _controlfp (unsigned int unNew, unsigned int unMask #endif /* - * This is the number of milliseconds to wait between internal retries in - * the Tcl_MutexLock function. This value must be greater than or equal - * to zero and should be a suitable value for the given platform. - */ - -#ifndef TCL_MUTEX_LOCK_SLEEP_TIME -# define TCL_MUTEX_LOCK_SLEEP_TIME (0) -#endif - -/* * This is the master lock used to serialize access to other serialization * data structures. */ @@ -67,13 +57,6 @@ static int allocOnce = 0; #endif /* TCL_THREADS */ /* - * The mutexLock serializes Tcl_MutexLock. This is necessary to prevent - * races when finalizing a mutex that some other thread may want to lock. - */ - -static CRITICAL_SECTION mutexLock; - -/* * The joinLock serializes Create- and ExitThread. This is necessary to * prevent a race where a new joinable thread exits before the creating thread * had the time to create the necessary data structures in the emulation @@ -386,7 +369,6 @@ TclpInitLock(void) */ init = 1; - InitializeCriticalSection(&mutexLock); InitializeCriticalSection(&joinLock); InitializeCriticalSection(&initLock); InitializeCriticalSection(&masterLock); @@ -534,7 +516,6 @@ void TclFinalizeLock(void) { MASTER_LOCK; - DeleteCriticalSection(&mutexLock); DeleteCriticalSection(&joinLock); /* @@ -588,8 +569,6 @@ Tcl_MutexLock( { CRITICAL_SECTION *csPtr; -retry: - if (*mutexPtr == NULL) { MASTER_LOCK; @@ -605,20 +584,8 @@ retry: } MASTER_UNLOCK; } - while (1) { - EnterCriticalSection(&mutexLock); - csPtr = *((CRITICAL_SECTION **)mutexPtr); - if (csPtr == NULL) { - LeaveCriticalSection(&mutexLock); - goto retry; - } - if (TryEnterCriticalSection(csPtr)) { - LeaveCriticalSection(&mutexLock); - return; - } - LeaveCriticalSection(&mutexLock); - Tcl_Sleep(TCL_MUTEX_LOCK_SLEEP_TIME); - } + csPtr = *((CRITICAL_SECTION **)mutexPtr); + EnterCriticalSection(csPtr); } /* |