Issue #6614 has been updated by funny_falcon (Yura Sokolov).


It seems that ObjectSpace.define_finalizer is complitely broken with Ruby 1.9.3
And even in Ruby 1.8.7 finalizer proc ought to be created in other scope to not hold reference to object in its binding.
See #6664 and https://gist.github.com/3009867 for more
----------------------------------------
Bug #6614: GC doesn't collect objects bound to (collectable) proc
https://bugs.ruby-lang.org/issues/6614#change-27545

Author: rogerdpack (Roger Pack)
Status: Rejected
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: tcs-ruby 1.9.3p28 (2012-01-28, TCS patched 2012-01-30) [i386-mingw32]


Hello all.
Previously discussed here: http://www.ruby-forum.com/topic/4402823

I would expect the following code to eventually run the finalizers mentioned:

def finalized_puts bad
    ObjectSpace.define_finalizer(bad) { print 'collector run', bad }
end

loop { finalized_puts [] }

This works in jruby as expected, but not in MRI.  This has the unfortunate side effect of making define_finalizer *very* difficult to actually use right http://www.mikeperham.com/2010/02/24/the-trouble-with-ruby-finalizers/

Cheers!



-- 
http://bugs.ruby-lang.org/