Posted to tcl by JH at Thu Sep 23 17:50:15 GMT 2010view raw

  1. ##################
  2. rename exit {}
  3. package re Itcl
  4. catch {namespace import itcl::*}
  5.  
  6. class myClass {
  7. public variable myvar 1
  8. public method mymethod {args} {puts $args}
  9. }
  10.  
  11. myClass myObj "#auto"
  12.  
  13. proc incmem {{val 10001}} {
  14. for {set i 0} {$i < $val} {incr i} { uplevel #0 find object myObj }
  15. }
  16. proc incmem2 {{val 9002}} {
  17. for {set i 0} {$i < $val} {incr i} { find object myObj }
  18. }
  19. proc incmem3 {{val 8001}} {
  20. for {set i 0} {$i < $val} {incr i} { uplevel #0 [list find object myObj] }
  21. }
  22. incmem
  23. incmem2
  24. incmem3
  25. ####################
  26.  
  27. Using 8.5 head build with mem-debug all and -DPURIFY
  28.  
  29. ==30809== 790,079 bytes in 10,001 blocks are possibly lost in loss record 10 of 11
  30. ==30809== at 0x4C241C3: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
  31. ==30809== by 0x51DE61: TclpAlloc (tclAlloc.c:708)
  32. ==30809== by 0x48EBC3: Tcl_DbCkalloc (tclCkalloc.c:387)
  33. ==30809== by 0x449299: Tcl_DbNewStringObj (tclStringObj.c:324)
  34. ==30809== by 0x43CB36: TclSubstTokens (tclParse.c:2364)
  35. ==30809== by 0x48733F: TclEvalEx (tclBasic.c:4274)
  36. ==30809== by 0x486CD2: Tcl_EvalEx (tclBasic.c:4043)
  37. ==30809== by 0x488772: TclEvalObjEx (tclBasic.c:5177)
  38. ==30809==
  39. ==30809== 1,200,120 bytes in 10,001 blocks are possibly lost in loss record 11 of 11
  40. ==30809== at 0x4C241C3: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
  41. ==30809== by 0x51DE61: TclpAlloc (tclAlloc.c:708)
  42. ==30809== by 0x48EBC3: Tcl_DbCkalloc (tclCkalloc.c:387)
  43. ==30809== by 0x449251: Tcl_DbNewStringObj (tclStringObj.c:323)
  44. ==30809== by 0x43CB36: TclSubstTokens (tclParse.c:2364)
  45. ==30809== by 0x48733F: TclEvalEx (tclBasic.c:4274)
  46. ==30809== by 0x486CD2: Tcl_EvalEx (tclBasic.c:4043)
  47. ==30809== by 0x488772: TclEvalObjEx (tclBasic.c:5177)
  48.  

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.