From: Florian Gross Date: 2003-10-29T09:02:22+09:00 Subject: [BUG] Fatal recycling of SystemStackErrors Moin! In Ruby 1.8.0 old SystemStackErrors seem to be reused when there should have been raised a new one instead: irb(main):001:0> y = proc { y.call }; y.call rescue nil => nil irb(main):002:0> eval 'z = proc { z.call }; z.call' SystemStackError: (irb):1:in `irb_binding': stack level too deep This can cause serious problems when you're running multiple Threads with different levels of safeness, because of fatal exceptions. This code snippet: 2.times { begin Thread.new { $SAFE = 4 # error isn't caused on lower $SAFE levels r = proc { r.call }; r.call # create a SystemStackError }.value rescue Exception => error; end p error } produces this output for me: nil # I'm using ruby 1.8.0 (2003-08-04) [i386-mswin32] and the errors also occur with linux releases of ruby 1.8.0. I haven't been able to run the above test code on an 1.6.8 release yet, so the bug might have been introduced only recently. That fatal exception is a show stopper for me because my application is instantly killed by it and because weirdly I'm not able to rescue it in the context where it happens. Regards, Florian Gross