From: <no...@so...> - 2002-09-05 16:20:30
|
Bugs item #604609, was opened at 2002-09-04 11:42 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=604609&group_id=10894 Category: 43. Parsing and Eval Group: None Status: Open Resolution: None Priority: 8 Submitted By: miguel sofer (msofer) Assigned to: miguel sofer (msofer) Summary: leak in command rename traces Initial Comment: The following scriptlet leaks two structs: a TraceCommandInfo and a Command # distilled from test trace-20.9 # # No leak if the trace really renames and does # not delete proc foo x {set x} trace add command foo rename {rename foo "";#} rename foo bar Valgrind's complaint: 40 bytes in 1 blocks are definitely lost in loss record 3 of 7 at 0x400467C4: malloc (vg_clientfuncs.c:100) by 0x80F9571: TclpAlloc (./../generic/tclAlloc.c:679) by 0x806B501: Tcl_Alloc (./../generic/tclCkalloc.c:1002) by 0x807A50B: TclTraceCommandObjCmd (./../generic/tclCmdMZ.c:3385) by 0x80798D6: Tcl_TraceObjCmd (./../generic/tclCmdMZ.c:2932) by 0x8066091: TclEvalObjvInternal (./../generic/tclBasic.c:3033) 56 bytes in 1 blocks are definitely lost in loss record 4 of 7 at 0x400467C4: malloc (vg_clientfuncs.c:100) by 0x80F9571: TclpAlloc (./../generic/tclAlloc.c:679) by 0x806B501: Tcl_Alloc (./../generic/tclCkalloc.c:1002) by 0x8064813: Tcl_CreateCommand (./../generic/tclBasic.c:1512) by 0x80CC92E: Tcl_ProcObjCmd (./../generic/tclProc.c:136) by 0x8066091: TclEvalObjvInternal (./../generic/tclBasic.c:3033) ---------------------------------------------------------------------- Comment By: Hemang Lavana (hemanglavana) Date: 2002-09-05 11:20 Message: Logged In: YES user_id=81875 The following patch should take care of the first complaint: Index: tclBasic.c =================================================================== RCS file: /cvsroot/tcl/tcl/generic/tclBasic.c,v retrieving revision 1.69 diff -r1.69 tclBasic.c 2526,2527c2526,2532 < * rename traces; while a delete trace is active we will not < * process any more delete traces --- > * rename traces; while if a delete trace is active we will never > * reach here -- because Tcl_DeleteCommandFromToken checks for the > * condition (cmdPtr->flags & CMD_IS_DELETED) and returns immediately > * when a command deletion is in progress. For all other traces, > * delete traces will not be invoked but a call to TraceCommandProc > * will ensure that tracePtr->clientData is freed whenever the > * command is "oldName" deleted. 2531,2533d2535 < } < if (cmdPtr->flags & TCL_TRACE_DELETE) { < flags &= ~TCL_TRACE_DELETE; Let me know if the 2nd complaint persists. Hemang. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=604609&group_id=10894 |