Feature #14143 ยป 0001-Set-Thread.report_on_exception-true-by-default-to-re.patch
| spec/ruby/core/thread/report_on_exception_spec.rb | ||
|---|---|---|
|
ruby_version_is "2.4" do
|
||
|
describe "Thread.report_on_exception" do
|
||
|
it "defaults to false" do
|
||
|
ruby_exe("p Thread.report_on_exception").should == "false\n"
|
||
|
ruby_version_is "2.4"..."2.5" do
|
||
|
it "defaults to false" do
|
||
|
ruby_exe("p Thread.report_on_exception").should == "false\n"
|
||
|
end
|
||
|
end
|
||
|
ruby_version_is "2.5" do
|
||
|
it "defaults to true" do
|
||
|
ruby_exe("p Thread.report_on_exception").should == "true\n"
|
||
|
end
|
||
|
end
|
||
|
end
|
||
| test/lib/test/unit.rb | ||
|---|---|---|
|
require 'test/unit/testcase'
|
||
|
require 'optparse'
|
||
|
# eregon: temporary until test-all is fixed to not produce dead Thread warnings
|
||
|
Thread.report_on_exception = false
|
||
|
# See Test::Unit
|
||
|
module Test
|
||
|
##
|
||
| test/ruby/test_exception.rb | ||
|---|---|---|
|
def test_thread_signal_location
|
||
|
_, stderr, _ = EnvUtil.invoke_ruby(%w"--disable-gems -d", <<-RUBY, false, true)
|
||
|
Thread.start do
|
||
|
Thread.current.report_on_exception = false
|
||
|
begin
|
||
|
Process.kill(:INT, $$)
|
||
|
ensure
|
||
| test/ruby/test_thread.rb | ||
|---|---|---|
|
assert_in_out_err([], <<-INPUT, %w(false 1), [])
|
||
|
p Thread.abort_on_exception
|
||
|
begin
|
||
|
t = Thread.new { raise }
|
||
|
t = Thread.new {
|
||
|
Thread.current.report_on_exception = false
|
||
|
raise
|
||
|
}
|
||
|
Thread.pass until t.stop?
|
||
|
p 1
|
||
|
rescue
|
||
| ... | ... | |
|
Thread.abort_on_exception = true
|
||
|
p Thread.abort_on_exception
|
||
|
begin
|
||
|
Thread.new { raise }
|
||
|
Thread.new {
|
||
|
Thread.current.report_on_exception = false
|
||
|
raise
|
||
|
}
|
||
|
sleep 0.5
|
||
|
p 1
|
||
|
rescue
|
||
| ... | ... | |
|
p Thread.abort_on_exception
|
||
|
begin
|
||
|
ok = false
|
||
|
t = Thread.new { Thread.pass until ok; raise }
|
||
|
t = Thread.new {
|
||
|
Thread.current.report_on_exception = false
|
||
|
Thread.pass until ok
|
||
|
raise
|
||
|
}
|
||
|
t.abort_on_exception = true
|
||
|
p t.abort_on_exception
|
||
|
ok = 1
|
||
| ... | ... | |
|
th_waiting = true
|
||
|
t = Thread.new {
|
||
|
Thread.current.report_on_exception = false
|
||
|
Thread.handle_interrupt(RuntimeError => :on_blocking) {
|
||
|
nil while th_waiting
|
||
|
# async interrupt should be raised _before_ writing puts arguments
|
||
| ... | ... | |
|
th_waiting = false
|
||
|
t = Thread.new {
|
||
|
Thread.current.report_on_exception = false
|
||
|
Thread.handle_interrupt(RuntimeError => :on_blocking) {
|
||
|
th_waiting = true
|
||
|
nil while th_waiting
|
||
| thread.c | ||
|---|---|---|
|
else {
|
||
|
if (th->report_on_exception) {
|
||
|
VALUE mesg = rb_thread_to_s(th->self);
|
||
|
rb_str_cat_cstr(mesg, " terminated with exception:\n");
|
||
|
rb_str_cat_cstr(mesg, " terminated with exception (report_on_exception is true):\n");
|
||
|
rb_write_error_str(mesg);
|
||
|
rb_ec_error_print(th->ec, errinfo);
|
||
|
}
|
||
| vm.c | ||
|---|---|---|
|
{
|
||
|
MEMZERO(vm, rb_vm_t, 1);
|
||
|
rb_vm_living_threads_init(vm);
|
||
|
vm->thread_report_on_exception = 1;
|
||
|
vm->src_encoding_index = -1;
|
||
|
vm_default_params_setup(vm);
|
||