From: Mark Hubbart Date: 2004-11-16T03:28:39+09:00 Subject: Re: Finalizers... Hi, On Wed, 10 Nov 2004 21:23:04 +0900, Michael Neumann wrote: > Hi, > > Are finalizers (ObjectSpace.define_finalizer) executed atomicly? Or can > they be interrupt by other finalizers (or threads)? > > I've noticed that finalizers can't raise exceptions. They silently > abort. That's a feature, but hard to find bugs in finalizers ;-) % ruby < e puts e, e.backtrace end end ObjectSpace.define_finalizer "foo", f EOP divided by 0 -:3:in `/' -:3 -:1:in `call' -:8 One could imagine an ObjectSpace.define_debug_finalizer: ### untested ### def ObjectSpace.define_debug_finalizer(obj, callable, io = STDERR) wrapper = lambda do |id| begin callable.call(id) rescue Exception=>e io.puts e, e.backtrace end end ObjectSpace.define_finalizer obj, wrapper end cheers, Mark