Skip to content

Commit 04dcf92

Browse files
committed
Remove references to vm->ractor.sync.lock_owner
1 parent f0f547c commit 04dcf92

File tree

5 files changed

+12
-26
lines changed

5 files changed

+12
-26
lines changed

thread_pthread.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1401,7 +1401,7 @@ void
14011401
rb_ractor_sched_barrier_start(rb_vm_t *vm, rb_ractor_t *cr)
14021402
{
14031403
VM_ASSERT(cr == GET_RACTOR());
1404-
VM_ASSERT(vm->ractor.sync.lock_owner == cr); // VM is locked
1404+
VM_ASSERT(rb_fiber_threadptr(vm->ractor.sync.lock_owner_fiber)->ractor == cr); // VM is locked
14051405
VM_ASSERT(!vm->ractor.sched.barrier_waiting);
14061406
VM_ASSERT(vm->ractor.sched.barrier_waiting_cnt == 0);
14071407
VM_ASSERT(vm->ractor.sched.barrier_ractor == NULL);
@@ -1421,7 +1421,6 @@ rb_ractor_sched_barrier_start(rb_vm_t *vm, rb_ractor_t *cr)
14211421
lock_rec = vm->ractor.sync.lock_rec;
14221422
rb_fiber_t *fiber = vm->ractor.sync.lock_owner_fiber;
14231423
vm->ractor.sync.lock_rec = 0;
1424-
vm->ractor.sync.lock_owner = NULL;
14251424
vm->ractor.sync.lock_owner_fiber = NULL;
14261425
rb_native_mutex_unlock(&vm->ractor.sync.lock);
14271426

@@ -1451,7 +1450,6 @@ rb_ractor_sched_barrier_start(rb_vm_t *vm, rb_ractor_t *cr)
14511450
// acquire VM lock
14521451
rb_native_mutex_lock(&vm->ractor.sync.lock);
14531452
vm->ractor.sync.lock_rec = lock_rec;
1454-
vm->ractor.sync.lock_owner = cr;
14551453
vm->ractor.sync.lock_owner_fiber = fiber;
14561454
}
14571455

@@ -1503,11 +1501,10 @@ ractor_sched_barrier_join_wait_locked(rb_vm_t *vm, rb_thread_t *th)
15031501
}
15041502

15051503
void
1506-
rb_ractor_sched_barrier_join(rb_vm_t *vm, rb_ractor_t *cr)
1504+
rb_ractor_sched_barrier_join(rb_vm_t *vm, rb_ractor_t *cr, rb_fiber_t *fiber)
15071505
{
15081506
VM_ASSERT(cr->threads.sched.running != NULL); // running ractor
15091507
VM_ASSERT(cr == GET_RACTOR());
1510-
VM_ASSERT(vm->ractor.sync.lock_owner == NULL); // VM is locked, but owner == NULL
15111508
VM_ASSERT(vm->ractor.sched.barrier_waiting); // VM needs barrier sync
15121509

15131510
#if USE_RUBY_DEBUG_LOG || VM_CHECK_MODE > 0
@@ -1588,14 +1585,13 @@ thread_sched_atfork(struct rb_thread_sched *sched)
15881585

15891586
vm->ractor.sync.lock_rec = 0;
15901587
th->ec->tag->lock_rec = 0;
1591-
vm->ractor.sync.lock_owner = NULL;
15921588
vm->ractor.sync.lock_owner_fiber = NULL;
15931589
rb_native_mutex_initialize(&vm->ractor.sync.lock);
15941590

15951591
rb_native_mutex_initialize(&vm->ractor.sched.lock);
15961592
#if VM_CHECK_MODE > 0
1597-
vm->ractor.sched.lock_owner = NULL;
15981593
vm->ractor.sched.locked = false;
1594+
vm->ractor.sched.lock_owner = NULL;
15991595
#endif
16001596

16011597
// rb_native_cond_destroy(&vm->ractor.sched.cond);

thread_sync.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,6 @@ rb_mutex_num_waiting(rb_mutex_t *mutex)
121121
return n;
122122
}
123123

124-
rb_thread_t* rb_fiber_threadptr(const rb_fiber_t *fiber);
125-
126124
static void
127125
mutex_free(void *ptr)
128126
{

thread_win32.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -968,9 +968,9 @@ rb_ractor_sched_barrier_start(rb_vm_t *vm, rb_ractor_t *cr)
968968
}
969969

970970
void
971-
rb_ractor_sched_barrier_join(rb_vm_t *vm, rb_ractor_t *cr)
971+
rb_ractor_sched_barrier_join(rb_vm_t *vm, rb_ractor_t *cr, rb_fiber_t *fiber)
972972
{
973-
vm->ractor.sync.lock_owner = cr;
973+
vm->ractor.sync.lock_owner_fiber = fiber;
974974
unsigned int barrier_cnt = vm->ractor.sync.barrier_cnt;
975975
rb_thread_t *th = GET_THREAD();
976976
bool running;
@@ -1005,7 +1005,7 @@ rb_ractor_sched_barrier_join(rb_vm_t *vm, rb_ractor_t *cr)
10051005
rb_vm_ractor_blocking_cnt_dec(vm, cr, __FILE__, __LINE__);
10061006
}
10071007

1008-
vm->ractor.sync.lock_owner = NULL;
1008+
vm->ractor.sync.lock_owner_fiber = NULL;
10091009
}
10101010

10111011
bool

vm_core.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -675,7 +675,6 @@ typedef struct rb_vm_struct {
675675
struct {
676676
// monitor
677677
rb_nativethread_lock_t lock;
678-
struct rb_ractor_struct *lock_owner;
679678
struct rb_fiber_struct *lock_owner_fiber;
680679
unsigned int lock_rec;
681680

@@ -2151,6 +2150,7 @@ void rb_execution_context_mark(const rb_execution_context_t *ec);
21512150
void rb_fiber_close(rb_fiber_t *fib);
21522151
void Init_native_thread(rb_thread_t *th);
21532152
int rb_vm_check_ints_blocking(rb_execution_context_t *ec);
2153+
rb_thread_t* rb_fiber_threadptr(const rb_fiber_t *fiber);
21542154

21552155
// vm_sync.h
21562156
void rb_vm_cond_wait(rb_vm_t *vm, rb_nativethread_cond_t *cond);

vm_sync.c

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include "vm_debug.h"
77

88
void rb_ractor_sched_barrier_start(rb_vm_t *vm, rb_ractor_t *cr);
9-
void rb_ractor_sched_barrier_join(rb_vm_t *vm, rb_ractor_t *cr);
9+
void rb_ractor_sched_barrier_join(rb_vm_t *vm, rb_ractor_t *cr, rb_fiber_t *fiber);
1010
void rb_ractor_sched_barrier_end(rb_vm_t *vm, rb_ractor_t *cr);
1111

1212
static bool
@@ -76,7 +76,6 @@ vm_lock_enter(rb_ractor_t *cr, rb_fiber_t *fiber, rb_vm_t *vm, bool locked, bool
7676
#endif
7777
// lock
7878
rb_native_mutex_lock(&vm->ractor.sync.lock);
79-
VM_ASSERT(vm->ractor.sync.lock_owner == NULL);
8079
VM_ASSERT(vm->ractor.sync.lock_owner_fiber == NULL);
8180
VM_ASSERT(vm->ractor.sync.lock_rec == 0);
8281

@@ -88,28 +87,26 @@ vm_lock_enter(rb_ractor_t *cr, rb_fiber_t *fiber, rb_vm_t *vm, bool locked, bool
8887
do {
8988
VM_ASSERT(vm_need_barrier_waiting(vm));
9089
RUBY_DEBUG_LOG("barrier serial:%u", vm->ractor.sched.barrier_serial);
91-
rb_ractor_sched_barrier_join(vm, cr);
90+
rb_ractor_sched_barrier_join(vm, cr, fiber);
9291
} while (vm_need_barrier_waiting(vm));
9392
}
9493

9594
VM_ASSERT(vm->ractor.sync.lock_rec == 0);
96-
VM_ASSERT(vm->ractor.sync.lock_owner == NULL);
9795
VM_ASSERT(vm->ractor.sync.lock_owner_fiber == NULL);
98-
vm->ractor.sync.lock_owner = cr;
9996
vm->ractor.sync.lock_owner_fiber = fiber;
10097
}
10198

10299
vm->ractor.sync.lock_rec++;
103100
*lev = vm->ractor.sync.lock_rec;
104101

105102
RUBY_DEBUG_LOG2(file, line, "rec:%u owner:%u", vm->ractor.sync.lock_rec,
106-
(unsigned int)rb_ractor_id(vm->ractor.sync.lock_owner));
103+
(unsigned int)rb_ractor_id(cr));
107104
}
108105

109106
static void
110107
vm_lock_leave(rb_vm_t *vm, bool no_barrier, unsigned int *lev APPEND_LOCATION_ARGS)
111108
{
112-
MAYBE_UNUSED(rb_ractor_t *cr = vm->ractor.sync.lock_owner);
109+
MAYBE_UNUSED(rb_ractor_t *cr = rb_fiber_threadptr(vm->ractor.sync.lock_owner_fiber)->ractor);
113110

114111
RUBY_DEBUG_LOG2(file, line, "rec:%u owner:%u%s", vm->ractor.sync.lock_rec,
115112
(unsigned int)rb_ractor_id(cr),
@@ -132,7 +129,6 @@ vm_lock_leave(rb_vm_t *vm, bool no_barrier, unsigned int *lev APPEND_LOCATION_AR
132129
*lev = vm->ractor.sync.lock_rec;
133130

134131
if (vm->ractor.sync.lock_rec == 0) {
135-
vm->ractor.sync.lock_owner = NULL;
136132
vm->ractor.sync.lock_owner_fiber = NULL;
137133
rb_native_mutex_unlock(&vm->ractor.sync.lock);
138134
}
@@ -204,11 +200,9 @@ vm_cond_wait(rb_vm_t *vm, rb_nativethread_cond_t *cond, unsigned long msec)
204200
{
205201
ASSERT_vm_locking();
206202
unsigned int lock_rec = vm->ractor.sync.lock_rec;
207-
rb_ractor_t *cr = vm->ractor.sync.lock_owner;
208203
rb_fiber_t *fiber = vm->ractor.sync.lock_owner_fiber;
209204

210205
vm->ractor.sync.lock_rec = 0;
211-
vm->ractor.sync.lock_owner = NULL;
212206
vm->ractor.sync.lock_owner_fiber = NULL;
213207
if (msec > 0) {
214208
rb_native_cond_timedwait(cond, &vm->ractor.sync.lock, msec);
@@ -217,7 +211,6 @@ vm_cond_wait(rb_vm_t *vm, rb_nativethread_cond_t *cond, unsigned long msec)
217211
rb_native_cond_wait(cond, &vm->ractor.sync.lock);
218212
}
219213
vm->ractor.sync.lock_rec = lock_rec;
220-
vm->ractor.sync.lock_owner = cr;
221214
vm->ractor.sync.lock_owner_fiber = fiber;
222215
}
223216

@@ -249,12 +242,11 @@ rb_vm_barrier(void)
249242
RB_DEBUG_COUNTER_INC(vm_sync_barrier);
250243

251244
if (!rb_multi_ractor_p()) {
252-
// no other ractors
253245
return;
254246
}
255247
else {
256248
rb_vm_t *vm = GET_VM();
257-
rb_ractor_t *cr = vm->ractor.sync.lock_owner;
249+
rb_ractor_t *cr = rb_fiber_threadptr(vm->ractor.sync.lock_owner_fiber)->ractor;
258250

259251
ASSERT_vm_locking();
260252
VM_ASSERT(cr == GET_RACTOR());

0 commit comments

Comments
 (0)