Posted to tcl by JH at Thu Sep 23 17:50:15 GMT 2010view raw
- ##################
- rename exit {}
- package re Itcl
- catch {namespace import itcl::*}
-
- class myClass {
- public variable myvar 1
- public method mymethod {args} {puts $args}
- }
-
- myClass myObj "#auto"
-
- proc incmem {{val 10001}} {
- for {set i 0} {$i < $val} {incr i} { uplevel #0 find object myObj }
- }
- proc incmem2 {{val 9002}} {
- for {set i 0} {$i < $val} {incr i} { find object myObj }
- }
- proc incmem3 {{val 8001}} {
- for {set i 0} {$i < $val} {incr i} { uplevel #0 [list find object myObj] }
- }
- incmem
- incmem2
- incmem3
- ####################
-
- Using 8.5 head build with mem-debug all and -DPURIFY
-
- ==30809== 790,079 bytes in 10,001 blocks are possibly lost in loss record 10 of 11
- ==30809== at 0x4C241C3: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
- ==30809== by 0x51DE61: TclpAlloc (tclAlloc.c:708)
- ==30809== by 0x48EBC3: Tcl_DbCkalloc (tclCkalloc.c:387)
- ==30809== by 0x449299: Tcl_DbNewStringObj (tclStringObj.c:324)
- ==30809== by 0x43CB36: TclSubstTokens (tclParse.c:2364)
- ==30809== by 0x48733F: TclEvalEx (tclBasic.c:4274)
- ==30809== by 0x486CD2: Tcl_EvalEx (tclBasic.c:4043)
- ==30809== by 0x488772: TclEvalObjEx (tclBasic.c:5177)
- ==30809==
- ==30809== 1,200,120 bytes in 10,001 blocks are possibly lost in loss record 11 of 11
- ==30809== at 0x4C241C3: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
- ==30809== by 0x51DE61: TclpAlloc (tclAlloc.c:708)
- ==30809== by 0x48EBC3: Tcl_DbCkalloc (tclCkalloc.c:387)
- ==30809== by 0x449251: Tcl_DbNewStringObj (tclStringObj.c:323)
- ==30809== by 0x43CB36: TclSubstTokens (tclParse.c:2364)
- ==30809== by 0x48733F: TclEvalEx (tclBasic.c:4274)
- ==30809== by 0x486CD2: Tcl_EvalEx (tclBasic.c:4043)
- ==30809== by 0x488772: TclEvalObjEx (tclBasic.c:5177)
-
Comments
Posted by JH at Thu Sep 23 18:58:18 GMT 2010 [text] [code]
Result was leak in itcl of one of the parsed objects. The core created it, but itcl incr'd a refcount it shouldn't have.