Skip to content

Commit 4eb8544

Browse files
committed
ractor_sync.c: Optimize ractor_set_successor_once to be lock free
1 parent 517c106 commit 4eb8544

1 file changed

Lines changed: 2 additions & 16 deletions

File tree

ractor_sync.c

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -728,22 +728,8 @@ ractor_sync_init(rb_ractor_t *r)
728728
static rb_ractor_t *
729729
ractor_set_successor_once(rb_ractor_t *r, rb_ractor_t *cr)
730730
{
731-
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);
742-
}
743-
744-
VM_ASSERT(r->sync.successor != NULL);
745-
746-
return r->sync.successor;
731+
rb_ractor_t *successor = ATOMIC_PTR_CAS(r->sync.successor, NULL, cr);
732+
return successor == NULL ? cr : successor;
747733
}
748734

749735
static VALUE ractor_reset_belonging(VALUE obj);

0 commit comments

Comments
 (0)