ractor_sync.c: Optimize ractor_set_successor_once to be lock free

This commit is contained in:
Jean Boussier 2025-07-03 11:46:28 +02:00
parent 95235fd528
commit 856962fa38

View file

@ -729,20 +729,10 @@ static rb_ractor_t *
ractor_set_successor_once(rb_ractor_t *r, rb_ractor_t *cr)
{
if (r->sync.successor == NULL) {
RACTOR_LOCK(r);
{
if (r->sync.successor != NULL) {
// already `value`ed
}
else {
r->sync.successor = cr;
}
}
RACTOR_UNLOCK(r);
rb_ractor_t *successor = ATOMIC_PTR_CAS(r->sync.successor, NULL, cr);
return successor == NULL ? cr : successor;
}
VM_ASSERT(r->sync.successor != NULL);
return r->sync.successor;
}