use std::{ptr::null_mut, sync::atomic::Ordering};
use super::{BfTreeService, WriteBarrierGuard};
use crate::error::Result;
impl BfTreeService {
pub fn write_barrier(&self) -> WriteBarrierGuard<'_> {
self.barriers.fetch_add(1, Ordering::SeqCst);
WriteBarrierGuard { service: self }
}
pub fn dispose(&self) {
if !self.disposed.swap(true, Ordering::SeqCst) {
self.raw_tree.store(null_mut(), Ordering::SeqCst);
self.arc_tree.write().take();
self.retired_trees.write().clear();
}
}
#[inline]
pub fn dispose_quiesced(&self) -> Result<()> {
self.dispose();
Ok(())
}
}