diff options
| author | davygrvy@pobox.com <davygrvy> | 2001-08-30 07:50:18 (GMT) |
|---|---|---|
| committer | davygrvy@pobox.com <davygrvy> | 2001-08-30 07:50:18 (GMT) |
| commit | 352161874d2b8dbfddb4e49c1b16230360c90057 (patch) | |
| tree | 7d838c15cd14b38785a1fab0ded168b19b1f0e95 /generic/tclAsync.c | |
| parent | ab3ae45566f8efe869c59729f26415a6a99eb6c4 (diff) | |
| download | tcl-352161874d2b8dbfddb4e49c1b16230360c90057.zip tcl-352161874d2b8dbfddb4e49c1b16230360c90057.tar.gz tcl-352161874d2b8dbfddb4e49c1b16230360c90057.tar.bz2 | |
* generic/tclAsync.c:
* generic/tclEvent.c:
* generic/tclInt.h: Improper cleanup of asyncMutex in tclAsync.c
repaired. TclFinalizeSynchronization() was trying to remove a
registered mutex that was dumped earlier when the TSD it was stored
in was cleared. This was only surfacing on *nix. Windows was being
masked by mutexes not actually being returned to the system! That
was repaired in a previous patch. Needed to add a private
TclFinalizeAsync() to tclAsync.c and called from Tcl_FinalizeThread().
Pheww.. Is this done yet?
[Bug: 414419] requested by Rob Ratcliff <rrr6399@futuretek.com>
Diffstat (limited to 'generic/tclAsync.c')
| -rw-r--r-- | generic/tclAsync.c | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/generic/tclAsync.c b/generic/tclAsync.c index 8d6757f..76e3e28 100644 --- a/generic/tclAsync.c +++ b/generic/tclAsync.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclAsync.c,v 1.5 2000/07/26 01:28:35 davidg Exp $ + * RCS: @(#) $Id: tclAsync.c,v 1.6 2001/08/30 07:50:18 davygrvy Exp $ */ #include "tclInt.h" @@ -72,9 +72,7 @@ typedef struct ThreadSpecificData { int asyncActive; -#ifdef TCL_THREADS Tcl_Mutex asyncMutex; /* Thread-specific AsyncHandler linked-list lock */ -#endif } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; @@ -83,6 +81,33 @@ static Tcl_ThreadDataKey dataKey; /* *---------------------------------------------------------------------- * + * TclFinalizeAsync -- + * + * Finalizes the mutex in the thread local data structure for the + * async subsystem. + * + * Results: + * None. + * + * Side effects: + * Forgets knowledge of the mutex should it have been created. + * + *---------------------------------------------------------------------- + */ + +void +TclFinalizeAsync() +{ + ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); + + if (tsdPtr->asyncMutex != NULL) { + Tcl_MutexFinalize(&tsdPtr->asyncMutex); + } +} + +/* + *---------------------------------------------------------------------- + * * Tcl_AsyncCreate -- * * This procedure creates the data structures for an asynchronous |
