I've filed this issue as http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId=2067.
Tomas From: [email protected] [mailto:[email protected]] On Behalf Of Martin Smith Sent: Friday, August 21, 2009 2:48 PM To: [email protected] Subject: [Ironruby-core] Issues with using Procs for events Hello, I am having some object lifetime issues with events in IronRuby. I think I have a repro, so bear with me. The problem seems to be that the proc seems to have a bunch of extra "stuff" in its execution environment. Consider the following ruby code: require "System.Windows.Forms" include System::Windows::Forms include System class Tester attr_reader :wc def test @wc = WeakReference.new(Button.new) add_handler end def add_handler # if we uncomment the following two lines out, and comment out the last line, the Button will leak and not # be cleaned up even though there should be no live references to it #...@handler = lambda {|*a| puts "text changed" } #[email protected]_changed.add<mailto:#[email protected]_changed.add> @handler @wc.target.text_changed.add lambda {|*a| puts "text changed" } end end t = Tester.new t.test System::GC.collect puts "wc is alive = #{t.wc.is_alive}" # this should always print false If you uncomment the two lines indicated in add_handler, the button in the weak reference will leak. I think that this is incorrect. The proc object (and its associated binding) shouldn't have any live references to @wc.target. I'm not 100% sure, but this makes it a bit harder if we want to be able to detach the proc later. Any thoughts? Thanks! Martin
_______________________________________________ Ironruby-core mailing list [email protected] http://rubyforge.org/mailman/listinfo/ironruby-core
