diff options
author | vasiljevic <vasiljevic@noemail.net> | 2004-07-15 21:20:23 (GMT) |
---|---|---|
committer | vasiljevic <vasiljevic@noemail.net> | 2004-07-15 21:20:23 (GMT) |
commit | 0037a74d59b71c12c2470e0016f77bb704aea64d (patch) | |
tree | 406f4edeca9bed43cc97046d91419f648b9602d4 /generic | |
parent | 79f72560e381793712dfb3e1962527bb3295805d (diff) | |
download | tcl-0037a74d59b71c12c2470e0016f77bb704aea64d.zip tcl-0037a74d59b71c12c2470e0016f77bb704aea64d.tar.gz tcl-0037a74d59b71c12c2470e0016f77bb704aea64d.tar.bz2 |
Added new fix for the Tcl Bug #770053. Now we conditionaly perform
the TclFinalizeNotifier in order to correct broken ref-counting
of the notifier thread.
FossilOrigin-Name: 9ed2ecf6265bbed6708e19e970a556d3556afb95
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tclNotify.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/generic/tclNotify.c b/generic/tclNotify.c index d312e6c..abd4e04 100644 --- a/generic/tclNotify.c +++ b/generic/tclNotify.c @@ -14,7 +14,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclNotify.c,v 1.11 2003/02/15 20:24:10 kennykb Exp $ + * RCS: @(#) $Id: tclNotify.c,v 1.11.2.1 2004/07/15 21:20:25 vasiljevic Exp $ */ #include "tclInt.h" @@ -137,7 +137,15 @@ TclInitNotifier() * * Side effects: * Removes the notifier associated with the current thread from - * the global notifier list. + * the global notifier list. This is done only if the notifier + * was initialized for this thread by call to TclInitNotifier(). + * This is always true for threads which have been seeded with + * an Tcl interpreter, since the call to Tcl_CreateInterp will, + * among other things, call TclInitializeSubsystems() and this + * one will, in turn, call the TclInitNotifier() for the thread. + * For threads created without the Tcl interpreter, though, + * nobody is explicitly nor implicitly calling the TclInitNotifier + * hence, TclFinalizeNotifier should not be performed at all. * *---------------------------------------------------------------------- */ @@ -149,6 +157,10 @@ TclFinalizeNotifier() ThreadSpecificData **prevPtrPtr; Tcl_Event *evPtr, *hold; + if (tsdPtr->threadId == (Tcl_ThreadId)0) { + return; /* Notifier not initialized for the current thread */ + } + Tcl_MutexLock(&(tsdPtr->queueMutex)); for (evPtr = tsdPtr->firstEventPtr; evPtr != (Tcl_Event *) NULL; ) { hold = evPtr; |