summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorMiguel Sofer <miguel.sofer@gmail.com>2005-10-29 17:45:22 (GMT)
committerMiguel Sofer <miguel.sofer@gmail.com>2005-10-29 17:45:22 (GMT)
commit905504b25f37317b91c478e7a9fc1d5166250a73 (patch)
treec33d7e39d470aeab57cb502bab9c9e94316c545c /generic
parent71b715c88b019bf819a112ac7e8b0aa68c6dc9e8 (diff)
downloadtcl-905504b25f37317b91c478e7a9fc1d5166250a73.zip
tcl-905504b25f37317b91c478e7a9fc1d5166250a73.tar.gz
tcl-905504b25f37317b91c478e7a9fc1d5166250a73.tar.bz2
* generic/tclCmdMZ.c (TraceVarProc): [Bug 1337229], partial
fix. Insure that a second call with TCL_TRACE_DESTROYED does not lead to a second call to Tcl_EventuallyFree(). It is still true that that second call should not happen, so the bug is not completely fixed. * tests/trace.test (test-18.3-4): added tests for bugs #1337229 and 1338280.
Diffstat (limited to 'generic')
-rw-r--r--generic/tclCmdMZ.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c
index d1cb609..b2f5919 100644
--- a/generic/tclCmdMZ.c
+++ b/generic/tclCmdMZ.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: tclCmdMZ.c,v 1.82.2.21 2005/10/23 22:01:29 msofer Exp $
+ * RCS: @(#) $Id: tclCmdMZ.c,v 1.82.2.22 2005/10/29 17:45:23 msofer Exp $
*/
#include "tclInt.h"
@@ -4694,7 +4694,7 @@ TraceVarProc(clientData, interp, name1, name2, flags)
Tcl_SavedResult state;
TraceVarInfo *tvarPtr = (TraceVarInfo *) clientData;
char *result;
- int code;
+ int code, destroy = 0;
Tcl_DString cmd;
/*
@@ -4755,7 +4755,9 @@ TraceVarProc(clientData, interp, name1, name2, flags)
*/
Tcl_SaveResult(interp, &state);
- if (flags & TCL_TRACE_DESTROYED) {
+ if ((flags & TCL_TRACE_DESTROYED)
+ && !(tvarPtr->flags & TCL_TRACE_DESTROYED)) {
+ destroy = 1;
tvarPtr->flags |= TCL_TRACE_DESTROYED;
}
@@ -4772,7 +4774,7 @@ TraceVarProc(clientData, interp, name1, name2, flags)
Tcl_DStringFree(&cmd);
}
}
- if (flags & TCL_TRACE_DESTROYED) {
+ if (destroy) {
if (result != NULL) {
register Tcl_Obj *errMsgObj = (Tcl_Obj *) result;