summaryrefslogtreecommitdiffstats
path: root/generic/tclBasic.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2005-06-21 14:44:55 (GMT)
committerdgp <dgp@users.sourceforge.net>2005-06-21 14:44:55 (GMT)
commit179120bc16b5d9ec51d765d0b4c9deb94e32b77e (patch)
treef04e973289929954456fb417874e3a44a3d2c8e6 /generic/tclBasic.c
parentdc23572f7107ba3cf664769fbb78653dad3c6188 (diff)
downloadtcl-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.c16
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