Skip to content

support nested VM barrier synchronization #13507

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 5, 2025
Merged

Conversation

ko1
Copy link
Contributor

@ko1 ko1 commented Jun 3, 2025

on RGENGC_CHECK_MODE > 1, there are the following steps

  1. gc_enter
  2. vm_barrier
  3. verify_internal_consistency
  4. vm_barrier

and it causes nested vm_barrier synchronization.

This patch allows such cases.

@ko1
Copy link
Contributor Author

ko1 commented Jun 3, 2025

   /tmp/ruby/src/trunk-asserts-nopara/vm_sync.c:240: Assertion Failed: rb_vm_barrier:!vm->ractor.sched.barrier_waiting
   ruby 3.5.0dev (2025-06-01T07:03:33Z master 3fd2d54a0a) +PRISM [x86_64-linux]
   
   -- Control frame information -----------------------------------------------
   c:0005 p:0027 s:0022 e:000020 METHOD <internal:ractor>:551
   c:0004 p:0003 s:0016 e:000015 METHOD <internal:ractor>:574 [FINISH]
   c:0003 p:---- s:0012 e:000011 CFUNC  :map
   c:0002 p:0029 s:0008 E:001b78 EVAL   bootstraptest.test_ractor.rb_138_1285.rb:10 [FINISH]
   c:0001 p:0000 s:0003 E:0001c0 DUMMY  [FINISH]
   
   -- Ruby level backtrace information ----------------------------------------
   bootstraptest.test_ractor.rb_138_1285.rb:10:in '<main>'
   bootstraptest.test_ractor.rb_138_1285.rb:10:in 'map'
   <internal:ractor>:574:in 'value'
   <internal:ractor>:551:in 'join'
   
   -- Threading information ---------------------------------------------------
   Total ractor count: 4
   Ruby thread count for this ractor: 1
   
   -- C level backtrace information -------------------------------------------
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(rb_print_backtrace+0x21) [0x55a07c148ab1] /tmp/ruby/src/trunk-asserts-nopara/vm_dump.c:843
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(fprintf+0x0) [0x55a07c148ca8] /tmp/ruby/src/trunk-asserts-nopara/vm_dump.c:1175
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(rb_vm_bugreport) /tmp/ruby/src/trunk-asserts-nopara/vm_dump.c:1178
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(rb_assert_failure_detail+0x157) [0x55a07bee31ac] /tmp/ruby/src/trunk-asserts-nopara/error.c:1215
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(RB_BUILTIN_TYPE+0x0) [0x55a07bee31ce] /tmp/ruby/src/trunk-asserts-nopara/error.c:1191
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(rb_assert_failure) (null):0
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(rb_ec_vm_lock_rec_release+0x0) [0x55a07bef3a55] /tmp/ruby/src/trunk-asserts-nopara/vm_sync.c:240
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(gc_verify_internal_consistency+0x14) [0x55a07bfc10f4] /tmp/ruby/src/trunk-asserts-nopara/gc/default/default.c:5186
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(gc_start+0xae) [0x55a07bfc1dae] /tmp/ruby/src/trunk-asserts-nopara/gc/default/default.c:6333
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(heap_prepare+0x87) [0x55a07bfc21b7] /tmp/ruby/src/trunk-asserts-nopara/gc/default/default.c:2051
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(heap_next_free_page+0x2d) [0x55a07bfc22cd] /tmp/ruby/src/trunk-asserts-nopara/gc/default/default.c:2275
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(newobj_cache_miss+0xfb) [0x55a07bfc23db] /tmp/ruby/src/trunk-asserts-nopara/gc/default/default.c:2382
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(rb_gc_impl_new_obj+0xa8) [0x55a07bfc27b8] /tmp/ruby/src/trunk-asserts-nopara/gc/default/default.c:2485
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(newobj_of+0x75) [0x55a07bfc3d15] /tmp/ruby/src/trunk-asserts-nopara/gc.c:1005
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(rb_wb_protected_newobj_of+0x3d) [0x55a07bfc3e4d] /tmp/ruby/src/trunk-asserts-nopara/gc.c:1043
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(vm_cc_new+0x26) [0x55a07c12fe46] /tmp/ruby/src/trunk-asserts-nopara/vm_callinfo.h:334
   /tmp/ruby/build/trunk-asserts-nopara/miniruby(vm_search_cc+0x224) [0x55a07c130114] /tmp/ruby/src/trunk-asserts-nopara/vm_insnhelper.c:2149

@ko1 ko1 enabled auto-merge (rebase) June 3, 2025 21:45
@ko1 ko1 force-pushed the nested_vm_barrier branch from 4f613b3 to d9cb562 Compare June 5, 2025 18:10
on `RGENGC_CHECK_MODE > 1`, there are the following steps

1. gc_enter
2. vm_barrier
3. verify_internal_consistency
4. vm_barrier

and it causes nested vm_barrier synchronization.

This patch allows such cases.
@ko1 ko1 force-pushed the nested_vm_barrier branch from d9cb562 to e7b2106 Compare June 5, 2025 18:14
@ko1 ko1 merged commit a62166e into ruby:master Jun 5, 2025
78 of 82 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant