Skip to content

Commit b9da711

Browse files
committed
ractor_sync.c: Optimize ractor_set_successor_once to be lock free
1 parent 0cf3491 commit b9da711

1 file changed

Lines changed: 2 additions & 12 deletions

File tree

ractor_sync.c

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -729,20 +729,10 @@ static rb_ractor_t *
729729
ractor_set_successor_once(rb_ractor_t *r, rb_ractor_t *cr)
730730
{
731731
if (r->sync.successor == NULL) {
732-
RACTOR_LOCK(r);
733-
{
734-
if (r->sync.successor != NULL) {
735-
// already `value`ed
736-
}
737-
else {
738-
r->sync.successor = cr;
739-
}
740-
}
741-
RACTOR_UNLOCK(r);
732+
rb_ractor_t *successor = ATOMIC_PTR_CAS(r->sync.successor, NULL, cr);
733+
return successor == NULL ? cr : successor;
742734
}
743735

744-
VM_ASSERT(r->sync.successor != NULL);
745-
746736
return r->sync.successor;
747737
}
748738

0 commit comments

Comments
 (0)