Actions
Bug #17985
closedRactor + GC: [BUG] not single ractor mode
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 3.1.0dev (2021-06-10T23:31:51Z master 9210f8df7f) [x86_64-linux]
Description
The attached script (named bug17882-gcmod.rb
) is a modification of bootstraptest/test_ractor.rb:224
that reads:
def test n
# (...snip...)
end
GC.disable # newly added
p 30.times.map{|i|
test i
}
GC.start # newly added
This script triggers a "not single ractor mode" bug:
<internal:ractor>:267: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues.
["ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok", "ok"]
<internal:gc>:35: [BUG] not single ractor mode
ruby 3.1.0dev (2021-06-10T23:31:51Z master 9210f8df7f) [x86_64-linux]
built with clang version 12.0.1
-- Control frame information -----------------------------------------------
c:0003 p:0011 s:0014 e:000013 METHOD <internal:gc>:35
c:0002 p:0037 s:0006 e:000005 EVAL /var/tmp/ruby/bug17882-gcmod.rb:31 [FINISH]
c:0001 p:0000 s:0003 E:000a70 (none) [FINISH]
-- Ruby level backtrace information ----------------------------------------
/var/tmp/ruby/bug17882-gcmod.rb:31:in `<main>'
<internal:gc>:35:in `start'
-- C level backtrace information -------------------------------------------
(...snip...)
A bactrace with GDB:
Thread 1 "miniruby" hit Breakpoint 1, rb_bug (fmt=0x5555555a102d "not single ractor mode") at ../error.c:784
784 va_start(args, fmt);
(gdb) bt
#0 rb_bug (fmt=0x5555555a102d "not single ractor mode") at ../error.c:784
#1 0x000055555596e457 in transient_heap_evacuate (dmy=0x0) at ../transient_heap.c:779
#2 0x00005555559cac3e in rb_postponed_job_flush (vm=0x5555559f5be0) at ../vm_trace.c:1698
#3 0x000055555593f994 in rb_threadptr_execute_interrupts (th=0x5555559f80b0, blocking_timing=0) at ../thread.c:2431
#4 0x000055555599f03d in rb_vm_check_ints (ec=0x5555559f89c0) at ../vm_core.h:1941
#5 0x000055555597fd18 in vm_pop_frame (ec=0x5555559f89c0, cfp=0x7ffff7757f68, ep=0x7ffff7658078) at ../vm_insnhelper.c:412
#6 0x0000555555985f77 in vm_exec_core (ec=0x5555559f89c0, initial=0) at ../insns.def:906
#7 0x000055555599a0d5 in rb_vm_exec (ec=0x5555559f89c0, mjit_enable_p=true) at ../vm.c:2160
#8 0x000055555599b0d5 in rb_iseq_eval_main (iseq=0x7ffff7fc3d08) at ../vm.c:2417
#9 0x000055555576121e in rb_ec_exec_node (ec=0x5555559f89c0, n=0x7ffff7fc3d08) at ../eval.c:320
#10 0x00005555557610ae in ruby_run_node (n=0x7ffff7fc3d08) at ../eval.c:379
#11 0x00005555556acb54 in main (argc=2, argv=0x7fffffffd938) at ../main.c:47
Files
Updated by eileencodes (Eileen Uchitelle) over 3 years ago
Pushed a fix here: https://github.com/ruby/ruby/pull/4596
Updated by eileencodes (Eileen Uchitelle) over 3 years ago
- Status changed from Open to Closed
Applied in changeset git|8209b735807d449c0a870562ee240585127ee100.
Evacuate transient heap when enabling ractors
If the GC has been disabled we need to re-enable it so we can evacuate
the transient heap.
Fixes https://bugs.ruby-lang.org/issues/17985
[Bug #17985] [ruby-core:104260]
Co-authored-by: Aaron Patterson tenderlove@ruby-lang.org
Actions
Like0
Like0Like0