summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2005-11-01 20:19:26 (GMT)
committerdgp <dgp@users.sourceforge.net>2005-11-01 20:19:26 (GMT)
commit239e8679aa5bc2c3e8db30277a67a2df86fc893a (patch)
tree3e0c0ef9b01b34839d99e90c3ac83e15926ea447
parent20a6d5a7afe92a3d2c19ab3a2588ecbf20442f9d (diff)
downloadtcl-239e8679aa5bc2c3e8db30277a67a2df86fc893a.zip
tcl-239e8679aa5bc2c3e8db30277a67a2df86fc893a.tar.gz
tcl-239e8679aa5bc2c3e8db30277a67a2df86fc893a.tar.bz2
* generic/tclCmdMZ.c (TclCheckExecutionTraces): Corrected mistaken
assumption that all command traces are set at the script level. Report/fix from Jacques H. de Villiers. [Bug 1337941]
-rw-r--r--ChangeLog4
-rw-r--r--generic/tclCmdMZ.c30
2 files changed, 20 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 0b8c170..9232bb0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2005-11-01 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclCmdMZ.c (TclCheckExecutionTraces): Corrected mistaken
+ assumption that all command traces are set at the script level.
+ Report/fix from Jacques H. de Villiers. [Bug 1337941]
+
* tests/expr-old.test (expr-32.52): Use int(.) to restrict
result of left shift to the C long range.
diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c
index b2f5919..f4c7765 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.22 2005/10/29 17:45:23 msofer Exp $
+ * RCS: @(#) $Id: tclCmdMZ.c,v 1.82.2.23 2005/11/01 20:19:26 dgp Exp $
*/
#include "tclInt.h"
@@ -4223,19 +4223,21 @@ TclCheckExecutionTraces(interp, command, numChars, cmdPtr, code,
active.reverseScan = 0;
active.nextTracePtr = tracePtr->nextPtr;
}
- tcmdPtr = (TraceCommandInfo*)tracePtr->clientData;
- if (tcmdPtr->flags != 0) {
- tcmdPtr->curFlags = traceFlags | TCL_TRACE_EXEC_DIRECT;
- tcmdPtr->curCode = code;
- tcmdPtr->refCount++;
- traceCode = TraceExecutionProc((ClientData)tcmdPtr, interp,
- curLevel, command, (Tcl_Command)cmdPtr, objc, objv);
- tcmdPtr->refCount--;
- if (tcmdPtr->refCount < 0) {
- Tcl_Panic("TclCheckExecutionTraces: negative TraceCommandInfo refCount");
- }
- if (tcmdPtr->refCount == 0) {
- ckfree((char*)tcmdPtr);
+ if (tracePtr->traceProc == TraceCommandProc) {
+ tcmdPtr = (TraceCommandInfo*)tracePtr->clientData;
+ if (tcmdPtr->flags != 0) {
+ tcmdPtr->curFlags = traceFlags | TCL_TRACE_EXEC_DIRECT;
+ tcmdPtr->curCode = code;
+ tcmdPtr->refCount++;
+ traceCode = TraceExecutionProc((ClientData)tcmdPtr, interp,
+ curLevel, command, (Tcl_Command)cmdPtr, objc, objv);
+ tcmdPtr->refCount--;
+ if (tcmdPtr->refCount < 0) {
+ Tcl_Panic("TclCheckExecutionTraces: negative TraceCommandInfo refCount");
+ }
+ if (tcmdPtr->refCount == 0) {
+ ckfree((char*)tcmdPtr);
+ }
}
}
if (active.nextTracePtr) {