From: michael@... Date: 2016-04-20T03:45:24+00:00 Subject: [ruby-core:75038] [Ruby trunk Bug#12302] at_exit status status is changed by raising/rescueing a exception in at_exit Issue #12302 has been reported by Michael Grosser. ---------------------------------------- Bug #12302: at_exit status status is changed by raising/rescueing a exception in at_exit https://bugs.ruby-lang.org/issues/12302 * Author: Michael Grosser * Status: Open * Priority: Normal * Assignee: * ruby -v: * Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- ~~~ at_exit do puts "1 #{$!}" end at_exit do puts "2 #{$!}" raise 'x' rescue nil end at_exit do puts "3 #{$!}" exit 1 end ~~~ Nr 3 runs first and exits 1 ... Nr2 receives the correct exit status ... but using raise/rescue there overrides $1 and Nr 1 thinks it is a clean exit ... seems semi related to https://bugs.ruby-lang.org/issues/5218 ... ideally the at_exit block should restore the previous $! ... or give some other way of knowing the exit status like passing it to the block ~~~ at_exit do |exception} ... end ~~~ -- https://bugs.ruby-lang.org/ Unsubscribe: