mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-10-30 01:38:49 +01:00
Move the parent assignation before the exchange operation
This commit is contained in:
parent
a7a01646cf
commit
4665bfcb19
@ -23,15 +23,13 @@ impl<T> AppendOnlyLinkedList<T> {
|
|||||||
use std::sync::atomic::Ordering::{Relaxed, SeqCst};
|
use std::sync::atomic::Ordering::{Relaxed, SeqCst};
|
||||||
|
|
||||||
let node = Box::leak(Box::new(Node { item, parent: AtomicPtr::default() }));
|
let node = Box::leak(Box::new(Node { item, parent: AtomicPtr::default() }));
|
||||||
|
|
||||||
let mut head = self.head.load(SeqCst);
|
let mut head = self.head.load(SeqCst);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
std::hint::spin_loop();
|
std::hint::spin_loop();
|
||||||
|
node.parent = AtomicPtr::new(head);
|
||||||
match self.head.compare_exchange_weak(head, node, SeqCst, Relaxed) {
|
match self.head.compare_exchange_weak(head, node, SeqCst, Relaxed) {
|
||||||
Ok(parent) => {
|
Ok(_) => break,
|
||||||
node.parent = AtomicPtr::new(parent);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
Err(new) => head = new,
|
Err(new) => head = new,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user