mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 08:33:58 +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)
|
ractor_set_successor_once(rb_ractor_t *r, rb_ractor_t *cr)
|
||||||
{
|
{
|
||||||
if (r->sync.successor == NULL) {
|
if (r->sync.successor == NULL) {
|
||||||
RACTOR_LOCK(r);
|
rb_ractor_t *successor = ATOMIC_PTR_CAS(r->sync.successor, NULL, cr);
|
||||||
{
|
return successor == NULL ? cr : successor;
|
||||||
if (r->sync.successor != NULL) {
|
|
||||||
// already `value`ed
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
r->sync.successor = cr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RACTOR_UNLOCK(r);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_ASSERT(r->sync.successor != NULL);
|
|
||||||
|
|
||||||
return r->sync.successor;
|
return r->sync.successor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue