mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
ractor_sync.c: Optimize ractor_set_successor_once
to be lock free
This commit is contained in:
parent
95235fd528
commit
856962fa38
1 changed files with 2 additions and 12 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue