Backport #5218
closedat_exit bug with exception handling
Description
It seems that ruby 1.9.2 and later doesn't like exception handling in at_exit
blocks and resets the exit code to 0.
Here is an example:
#!/usr/bin/ruby at_exit do raise "X" rescue nil end at_exit do nil end at_exit do exit 1 end at_exit do exit 2 end
Results:
### ruby 1.9.4dev (2011-08-23 trunk 33027) [x86_64-darwin10.8.0] $ ruby at_exit.rb ; echo $? 0 ### ruby 1.9.3dev (2011-07-31 revision 32789) [x86_64-darwin10.8.0] $ ruby at_exit.rb ; echo $? 0 ### ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin10.8.0] $ ruby at_exit.rb ; echo $? 0 ### ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-darwin10.8.0] $ ruby at_exit.rb ; echo $? 1 ### jruby 1.6.3 (ruby-1.8.7-p330) (2011-07-07 965162f) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_26) [darwin-x86_64-java] $ jruby at_exit.rb ; echo $? 1 ### jruby 1.6.3 (ruby-1.9.2-p136) (2011-07-07 965162f) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_26) [darwin-x86_64-java] $ jruby --1.9 at_exit.rb ; echo $? 1
Related issues:
https://github.com/jnicklas/capybara/pull/463
https://github.com/jnicklas/capybara/issues/178
https://github.com/rspec/rspec-core/pull/410
Updated by ebeigarts (Edgars Beigarts) over 9 years ago
To fix this I came up with this workaround:
if defined?(RUBY_ENGINE) && RUBY_ENGINE == "ruby" && RUBY_VERSION >= "1.9"
module Kernel
alias :__at_exit :at_exit
def at_exit(&block)
__at_exit do
exit_status = $!.status if $!.is_a?(SystemExit)
block.call
exit exit_status if exit_status
end
end
end
end
Updated by ko1 (Koichi Sasada) about 9 years ago
- Status changed from Open to Assigned
- Assignee set to nobu (Nobuyoshi Nakada)
Updated by nobu (Nobuyoshi Nakada) about 9 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r34982.
Edgars, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
- eval_jump.c (rb_exec_end_proc): remember the latest exit status. [ruby-core:43173][Bug #5218]
Updated by rubiii (Daniel Harrington) over 8 years ago
Hi guys,
thank you for this fix!
Any information about when it's going to be released?
Cheers,
Daniel
Updated by mdemare (Michiel de Mare) about 8 years ago
So what happened to the changeset? It's still broken in 1.9.3-p385.
Updated by nobu (Nobuyoshi Nakada) about 8 years ago
- Tracker changed from Bug to Backport
- Project changed from Ruby master to Backport193
- Status changed from Closed to Assigned
- Assignee changed from nobu (Nobuyoshi Nakada) to usa (Usaku NAKAMURA)
Updated by usa (Usaku NAKAMURA) about 8 years ago
- Status changed from Assigned to Closed