1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

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>
This commit is contained in:
eileencodes 2021-06-22 13:43:18 -04:00 committed by Aaron Patterson
parent 2fb435b3ab
commit 8209b73580
Notes: git 2021-06-24 02:03:37 +09:00
2 changed files with 19 additions and 0 deletions

View file

@ -1405,4 +1405,17 @@ assert_equal "ok", %q{
end
}
assert_equal "ok", %q{
GC.disable
Ractor.new {}
raise "not ok" unless GC.disable
foo = []
10.times { foo << 1 }
GC.start
'ok'
}
end # if !ENV['GITHUB_WORKFLOW']

View file

@ -1420,9 +1420,15 @@ cancel_single_ractor_mode(void)
// enable multi-ractor mode
RUBY_DEBUG_LOG("enable multi-ractor mode", 0);
VALUE was_disabled = rb_gc_enable();
rb_gc_start();
rb_transient_heap_evacuate();
if (was_disabled) {
rb_gc_disable();
}
ruby_single_main_ractor = NULL;
if (rb_warning_category_enabled_p(RB_WARN_CATEGORY_EXPERIMENTAL)) {