]> Repositorios git - scryer-prolog.git/commitdiff
Revert "Enable multiple Machines per process by having ATOM_TABLE_BUF_BASE always...
authorNicolas Luck <[email protected]>
Thu, 24 Aug 2023 16:13:55 +0000 (18:13 +0200)
committerNicolas Luck <[email protected]>
Thu, 24 Aug 2023 17:13:11 +0000 (19:13 +0200)
This reverts commit bfb3164a0d766035de382e653de01b1e56f1feed.

src/atom_table.rs

index 11693484d2a9a0a43aee1a8527d151868024d4b8..48f50ec948a162b7fe2c4cfa70823c228490958b 100644 (file)
@@ -40,11 +40,17 @@ impl From<bool> 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<u8> =
+    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")]