From: nobu@... Date: 2016-04-22T06:02:18+00:00 Subject: [ruby-core:75088] [Ruby trunk Bug#12302] at_exit status status is changed by raising/rescueing a exception in at_exit Issue #12302 has been updated by Nobuyoshi Nakada. Description updated Backport changed from 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN to 2.1: REQUIRED, 2.2: REQUIRED, 2.3: REQUIRED ---------------------------------------- Bug #12302: at_exit status status is changed by raising/rescueing a exception in at_exit https://bugs.ruby-lang.org/issues/12302#change-58212 * Author: Michael Grosser * Status: Open * Priority: Normal * Assignee: * ruby -v: * Backport: 2.1: REQUIRED, 2.2: REQUIRED, 2.3: REQUIRED ---------------------------------------- ~~~ruby 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 `$!` 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 ~~~ruby at_exit do |exception| ... end ~~~ -- https://bugs.ruby-lang.org/ Unsubscribe: