From: SourceForge.net <no...@so...> - 2003-04-13 06:28:50
|
Bugs item #720350, was opened at 2003-04-12 12:28 Message generated for change (Comment added) made by mrfitz You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112997&aid=720350&group_id=12997 Category: 04. Canvas Basics Group: 8.4.2 Status: Open Resolution: Works For Me Priority: 5 Submitted By: Mike Fitzgibbon (mrfitz) Assigned to: Jeffrey Hobbs (hobbs) Summary: Memory leak or ? in canvas, WinXP Home Initial Comment: ActiveState ActiveTcl 8.4.2 (fresh install, also seen with previous version, 8.4.0.1?) WinXP Home, ver 2002, sp1 Mobile Athlon XP 1500+, 1.33 GHz 240 MB Ram Taking the Colliding Balls script from the wiki, http://wiki.tcl.tk/8573 I appended the following code to add and delete balls on button presses: # Maximum ball number set State(ballCount) [llength $State(ballList)] # Create a new ball on right-click bind $State(canvas) <Button-3> { incr State(ballCount) set ball ball$State(ballCount) createBall $ball lappend State(ballList) $ball } # Delete the closest ball on left-click bind $State(canvas) <Button-1> { set id [$State(canvas) find closest %x %y] set ball [lindex [$State(canvas) gettags $id] 0] set idx [lsearch $State(ballList) $ball] if { $idx >= 0 } { set State(ballList) \ [lreplace $State(ballList) $idx $idx] $State(canvas) delete $id } } I also added the following to the end of proc moveBalls { } : # Remove slow balls foreach ball $State(ballList) { foreach {xvel yvel} $State(vel,$ball) {} set vel [expr {sqrt( $xvel*$xvel + $yvel*$yvel )}] if {$vel < 0.5} { set id [$State(canvas) find withtag $ball] set idx [lsearch $State(ballList) $ball] set State(ballList) [lreplace $State(ballList) $idx $idx] $State(canvas) delete $id } } After a while of creating balls and letting the slow ones be removed, the canvas froze and the wish84 application shows 99% CPU utilization and progressively increasing mem usage until ~150MB then drops to between ~20-40 MB (fluctuating) while the commit charge continues to increase. Eventually a "Fatal Error in Wish" box pops up stating "unable to alloc n bytes" (where in my case n was ~100660000 first, 2400 second). The windows error the first time showed: AppName: wish.exe AppVer: 8.4.2.2 ModName: ntdll.dll ModVer: 5.1.2600.1106 Offset: 000267cd appcompat.txt attached ---------------------------------------------------------------------- >Comment By: Mike Fitzgibbon (mrfitz) Date: 2003-04-12 23:45 Message: Logged In: YES user_id=121466 The code did not appear in the "existing files" section, or show as attached in the response email, so I am trying to upload it again. (I forgot the checkbox, oops) ---------------------------------------------------------------------- Comment By: Mike Fitzgibbon (mrfitz) Date: 2003-04-12 23:38 Message: Logged In: YES user_id=121466 The addition to moveBalls was made just prior to the after line. It is a recent addition, the problem occurred with the prior TCL version without it. I just added it to help automate the process. It takes awhile for the problem to manifest itself, ~25 minutes just now. Whenever the number of balls dropped to 8, I added 8 more. I am attaching the code I am running that exhibits the problem It is named CollidingBalls.tcl ---------------------------------------------------------------------- Comment By: Jeffrey Hobbs (hobbs) Date: 2003-04-12 13:39 Message: Logged In: YES user_id=72656 Attached is my interpretation of what the user was using. I do not have problems on a P4/2.4ghz machine running Win2K and 8.4.2. Memory does climb, CPU usage is usually under 10% unless I have more than 20 balls on the screen. I could see a possible problem that if code were added after the after and took too long, you would end up with multiple calls in moveBalls that could create eventually constant moveBalls calls, but I couldn't simulate the problem. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112997&aid=720350&group_id=12997 |