From afbadd9ea2c6f6f94d38dbf2132f1ac09ea32c88 Mon Sep 17 00:00:00 2001 From: Nicolas Luck Date: Thu, 24 Aug 2023 18:13:55 +0200 Subject: [PATCH] Revert "Enable multiple Machines per process by having ATOM_TABLE_BUF_BASE always be thread_local, not only in cfg(test) mode." This reverts commit bfb3164a0d766035de382e653de01b1e56f1feed. --- src/atom_table.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/atom_table.rs b/src/atom_table.rs index 11693484..48f50ec9 100644 --- a/src/atom_table.rs +++ b/src/atom_table.rs @@ -40,11 +40,17 @@ impl From for Atom { const ATOM_TABLE_INIT_SIZE: usize = 1 << 16; const ATOM_TABLE_ALIGN: usize = 8; +#[cfg(test)] thread_local! { static ATOM_TABLE_BUF_BASE: std::cell::RefCell<*const u8> = std::cell::RefCell::new(ptr::null_mut()); } +#[cfg(not(test))] +static ATOM_TABLE_BUF_BASE: std::sync::atomic::AtomicPtr = + std::sync::atomic::AtomicPtr::new(ptr::null_mut()); + fn set_atom_tbl_buf_base(old_ptr: *const u8, new_ptr: *const u8) -> Result<(), *const u8> { +#[cfg(test)] { ATOM_TABLE_BUF_BASE.with(|atom_table_buf_base| { let mut borrow = atom_table_buf_base.borrow_mut(); @@ -56,12 +62,30 @@ fn set_atom_tbl_buf_base(old_ptr: *const u8, new_ptr: *const u8) -> Result<(), * } })?; }; + #[cfg(not(test))] + { + ATOM_TABLE_BUF_BASE + .compare_exchange( + old_ptr.cast_mut(), + new_ptr.cast_mut(), + std::sync::atomic::Ordering::Relaxed, + std::sync::atomic::Ordering::Relaxed, + ) + .map_err(|ptr| ptr.cast_const()) + }?; Ok(()) } pub(crate) fn get_atom_tbl_buf_base() -> *const u8 { + #[cfg(test)] + { ATOM_TABLE_BUF_BASE.with(|atom_table_buf_base| *atom_table_buf_base.borrow()) } +#[cfg(not(test))] + { + ATOM_TABLE_BUF_BASE.load(std::sync::atomic::Ordering::Relaxed) + } +} #[test] #[should_panic(expected = "Overwriting atom table base pointer")] -- 2.54.0