diff options
Diffstat (limited to 'vm_sync.c')
| -rw-r--r-- | vm_sync.c | 25 |
1 files changed, 25 insertions, 0 deletions
@@ -26,6 +26,20 @@ RUBY_ASSERT_vm_locking(void) } void +RUBY_ASSERT_vm_locking_with_barrier(void) +{ + if (rb_multi_ractor_p()) { + rb_vm_t *vm = GET_VM(); + VM_ASSERT(vm_locked(vm)); + + if (vm->ractor.cnt > 1) { + /* Written to only when holding both ractor.sync and ractor.sched lock */ + VM_ASSERT(vm->ractor.sched.barrier_waiting); + } + } +} + +void RUBY_ASSERT_vm_unlocking(void) { if (rb_multi_ractor_p()) { @@ -283,3 +297,14 @@ rb_ec_vm_lock_rec_release(const rb_execution_context_t *ec, VM_ASSERT(recorded_lock_rec == rb_ec_vm_lock_rec(ec)); } + +VALUE +rb_vm_lock_with_barrier(VALUE (*func)(void *args), void *args) +{ + VALUE result = 0; + RB_VM_LOCKING() { + rb_vm_barrier(); + result = func(args); + } + return result; +} |
