diff options
author | Koichi Sasada <[email protected]> | 2020-12-02 04:10:05 +0900 |
---|---|---|
committer | Koichi Sasada <[email protected]> | 2020-12-07 08:28:36 +0900 |
commit | 554a7180a0aad85bee5cb8ed41d99d16dab304e7 (patch) | |
tree | f0bb8a75d926265af53dd37ff01224560a41226a /vm_sync.c | |
parent | 23f9447429a1bbb262aa19afd9a2a1ad0eba8ca6 (diff) |
RB_VM_LOCK_ENTER_CR_LEV
This is variant of RB_VM_LOCK_ENTER_LEV, but accept current racotr's
pointer.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/3842
Diffstat (limited to 'vm_sync.c')
-rw-r--r-- | vm_sync.c | 20 |
1 files changed, 16 insertions, 4 deletions
@@ -39,13 +39,12 @@ rb_vm_locked_p(void) } static void -vm_lock_enter(rb_vm_t *vm, bool locked, unsigned int *lev APPEND_LOCATION_ARGS) +vm_lock_enter(rb_ractor_t *cr, rb_vm_t *vm, bool locked, unsigned int *lev APPEND_LOCATION_ARGS) { if (locked) { ASSERT_vm_locking(); } else { - rb_ractor_t *cr = GET_RACTOR(); #if RACTOR_CHECK_MODE // locking ractor and acquire VM lock will cause deadlock VM_ASSERT(cr->locked_by != cr->self); @@ -128,7 +127,19 @@ MJIT_FUNC_EXPORTED void rb_vm_lock_enter_body(unsigned int *lev APPEND_LOCATION_ARGS) { rb_vm_t *vm = GET_VM(); - vm_lock_enter(vm, vm_locked(vm), lev APPEND_LOCATION_PARAMS); + if (vm_locked(vm)) { + vm_lock_enter(NULL, vm, true, lev APPEND_LOCATION_PARAMS); + } + else { + vm_lock_enter(GET_RACTOR(), vm, false, lev APPEND_LOCATION_PARAMS); + } +} + +MJIT_FUNC_EXPORTED void +rb_vm_lock_enter_body_cr(rb_ractor_t *cr, unsigned int *lev APPEND_LOCATION_ARGS) +{ + rb_vm_t *vm = GET_VM(); + vm_lock_enter(cr, vm, vm_locked(vm), lev APPEND_LOCATION_PARAMS); } MJIT_FUNC_EXPORTED void @@ -142,7 +153,8 @@ rb_vm_lock_body(LOCATION_ARGS) { rb_vm_t *vm = GET_VM(); ASSERT_vm_unlocking(); - vm_lock_enter(vm, false, &vm->ractor.sync.lock_rec APPEND_LOCATION_PARAMS); + + vm_lock_enter(GET_RACTOR(), vm, false, &vm->ractor.sync.lock_rec APPEND_LOCATION_PARAMS); } void |