mirror of
https://github.com/quickwit-oss/tantivy.git
synced 2026-06-03 09:00:42 +00:00
removed deprecated compare_and_swap
This commit is contained in:
@@ -28,7 +28,11 @@ impl FileWatcher {
|
||||
}
|
||||
|
||||
pub fn spawn(&self) {
|
||||
if self.state.compare_and_swap(0, 1, Ordering::SeqCst) > 0 {
|
||||
if self
|
||||
.state
|
||||
.compare_exchange(0, 1, Ordering::SeqCst, Ordering::SeqCst)
|
||||
.is_err()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -100,20 +100,32 @@ impl<T> Pool<T> {
|
||||
|
||||
/// At the exit of this method,
|
||||
/// - freshest_generation has a value greater or equal than generation
|
||||
/// - freshest_generation has a value that has been advertised
|
||||
/// - freshest_generation has)
|
||||
/// - freshest_generation has the last value that has been advertised
|
||||
fn advertise_generation(&self, generation: usize) {
|
||||
// not optimal at all but the easiest to read proof.
|
||||
let mut former_generation = self.freshest_generation.load(Ordering::Acquire);
|
||||
loop {
|
||||
let former_generation = self.freshest_generation.load(Ordering::Acquire);
|
||||
if former_generation >= generation {
|
||||
break;
|
||||
}
|
||||
self.freshest_generation.compare_and_swap(
|
||||
match self.freshest_generation.compare_exchange(
|
||||
former_generation,
|
||||
generation,
|
||||
Ordering::SeqCst,
|
||||
);
|
||||
Ordering::SeqCst,
|
||||
) {
|
||||
Ok(_) => {
|
||||
// We successfuly updated the value.
|
||||
return;
|
||||
}
|
||||
Err(current_generation) => {
|
||||
// The value was updated after we did our load apparently.
|
||||
// In theory, it is always a value greater than ours, but just to
|
||||
// simplify the logic, we keep looping until we reach a
|
||||
// value >= to our target value.
|
||||
if current_generation >= generation {
|
||||
return;
|
||||
}
|
||||
former_generation = current_generation;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user