diff options
author | dgp <dgp@users.sourceforge.net> | 2005-06-21 14:44:55 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2005-06-21 14:44:55 (GMT) |
commit | 179120bc16b5d9ec51d765d0b4c9deb94e32b77e (patch) | |
tree | f04e973289929954456fb417874e3a44a3d2c8e6 /generic/tclBasic.c | |
parent | dc23572f7107ba3cf664769fbb78653dad3c6188 (diff) | |
download | tcl-179120bc16b5d9ec51d765d0b4c9deb94e32b77e.zip tcl-179120bc16b5d9ec51d765d0b4c9deb94e32b77e.tar.gz tcl-179120bc16b5d9ec51d765d0b4c9deb94e32b77e.tar.bz2 |
* generic/tclBasic.c (Tcl_DeleteTrace): Added missing walk of the
* tests/trace.test (trace-34.1): list of active traces to
cleanup references to traces being deleted. [Bug 1201035]
Diffstat (limited to 'generic/tclBasic.c')
-rw-r--r-- | generic/tclBasic.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/generic/tclBasic.c b/generic/tclBasic.c index dfa24e8..ccb6de9 100644 --- a/generic/tclBasic.c +++ b/generic/tclBasic.c @@ -13,7 +13,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclBasic.c,v 1.75.2.14 2005/03/18 16:33:41 dgp Exp $ + * RCS: @(#) $Id: tclBasic.c,v 1.75.2.15 2005/06/21 14:44:58 dgp Exp $ */ #include "tclInt.h" @@ -5160,6 +5160,7 @@ Tcl_DeleteTrace(interp, trace) Interp *iPtr = (Interp *) interp; Trace *tracePtr = (Trace *) trace; register Trace **tracePtr2 = &(iPtr->tracePtr); + ActiveInterpTrace *activePtr; /* * Locate the trace entry in the interpreter's trace list, @@ -5175,6 +5176,19 @@ Tcl_DeleteTrace(interp, trace) (*tracePtr2) = (*tracePtr2)->nextPtr; /* + * The code below makes it possible to delete traces while traces + * are active: it makes sure that the deleted trace won't be + * processed by TclCheckInterpTraces. + */ + + for (activePtr = iPtr->activeInterpTracePtr; activePtr != NULL; + activePtr = activePtr->nextPtr) { + if (activePtr->nextTracePtr == tracePtr) { + activePtr->nextTracePtr = tracePtr->nextPtr; + } + } + + /* * If the trace forbids bytecode compilation, change the interpreter's * state. If bytecode compilation is now permitted, flag the fact and * advance the compilation epoch so that procs will be recompiled to |