about summary refs log tree commit diff
path: root/src/liballoc
diff options
context:
space:
mode:
authorJorge Aparicio <japaricious@gmail.com>2016-11-10 23:42:59 -0500
committerJorge Aparicio <japaricious@gmail.com>2016-11-10 23:42:59 -0500
commit24dc2bc3f5946927784bf1924041035be07474b2 (patch)
tree5eedb709a7d838a03c0f8650fe61fb29843be2e1 /src/liballoc
parent907d2a1aeb26151cc81dfa148e874e4fe50d1a14 (diff)
downloadrust-24dc2bc3f5946927784bf1924041035be07474b2.tar.gz
rust-24dc2bc3f5946927784bf1924041035be07474b2.zip
use an 'imp' module to reduce the amount of cfgs
Diffstat (limited to 'src/liballoc')
-rw-r--r--src/liballoc/oom.rs59
1 files changed, 32 insertions, 27 deletions
diff --git a/src/liballoc/oom.rs b/src/liballoc/oom.rs
index afdc19678dc..87ae16f6c53 100644
--- a/src/liballoc/oom.rs
+++ b/src/liballoc/oom.rs
@@ -9,14 +9,9 @@
 // except according to those terms.
 
 #[cfg(target_has_atomic = "ptr")]
-use core::sync::atomic::{AtomicPtr, Ordering};
-#[cfg(target_has_atomic = "ptr")]
-use core::mem;
+pub use self::imp::set_oom_handler;
 use core::intrinsics;
 
-#[cfg(target_has_atomic = "ptr")]
-static OOM_HANDLER: AtomicPtr<()> = AtomicPtr::new(default_oom_handler as *mut ());
-
 fn default_oom_handler() -> ! {
     // The default handler can't do much more since we can't assume the presence
     // of libc or any way of printing an error message.
@@ -24,34 +19,44 @@ fn default_oom_handler() -> ! {
 }
 
 /// Common out-of-memory routine
-#[cfg(target_has_atomic = "ptr")]
 #[cold]
 #[inline(never)]
 #[unstable(feature = "oom", reason = "not a scrutinized interface",
            issue = "27700")]
 pub fn oom() -> ! {
-    let value = OOM_HANDLER.load(Ordering::SeqCst);
-    let handler: fn() -> ! = unsafe { mem::transmute(value) };
-    handler();
+    self::imp::oom()
 }
 
-/// Common out-of-memory routine
-#[cfg(not(target_has_atomic = "ptr"))]
-#[cold]
-#[inline(never)]
-#[unstable(feature = "oom", reason = "not a scrutinized interface",
-           issue = "27700")]
-pub fn oom() -> ! {
-    default_oom_handler()
+#[cfg(target_has_atomic = "ptr")]
+mod imp {
+    use core::mem;
+    use core::sync::atomic::{AtomicPtr, Ordering};
+
+    static OOM_HANDLER: AtomicPtr<()> = AtomicPtr::new(super::default_oom_handler as *mut ());
+
+    #[inline(always)]
+    pub fn oom() -> ! {
+        let value = OOM_HANDLER.load(Ordering::SeqCst);
+        let handler: fn() -> ! = unsafe { mem::transmute(value) };
+        handler();
+    }
+
+    /// Set a custom handler for out-of-memory conditions
+    ///
+    /// To avoid recursive OOM failures, it is critical that the OOM handler does
+    /// not allocate any memory itself.
+    #[unstable(feature = "oom", reason = "not a scrutinized interface",
+               issue = "27700")]
+    pub fn set_oom_handler(handler: fn() -> !) {
+        OOM_HANDLER.store(handler as *mut (), Ordering::SeqCst);
+    }
+
 }
 
-/// Set a custom handler for out-of-memory conditions
-///
-/// To avoid recursive OOM failures, it is critical that the OOM handler does
-/// not allocate any memory itself.
-#[cfg(target_has_atomic = "ptr")]
-#[unstable(feature = "oom", reason = "not a scrutinized interface",
-           issue = "27700")]
-pub fn set_oom_handler(handler: fn() -> !) {
-    OOM_HANDLER.store(handler as *mut (), Ordering::SeqCst);
+#[cfg(not(target_has_atomic = "ptr"))]
+mod imp {
+    #[inline(always)]
+    pub fn oom() -> ! {
+        super::default_oom_handler()
+    }
 }