diff --git a/library/std/src/sys/yggdrasil/alloc.rs b/library/std/src/sys/yggdrasil/alloc.rs index 09f31e84226..1aa0c96465c 100644 --- a/library/std/src/sys/yggdrasil/alloc.rs +++ b/library/std/src/sys/yggdrasil/alloc.rs @@ -1,13 +1,17 @@ use crate::alloc::{GlobalAlloc, Layout, System}; use crate::ptr::NonNull; use crate::sync::Mutex; -use libyalloc::Allocator; +use libyalloc::allocator::BucketAllocator; + +struct Global { + inner: Mutex, +} #[stable(feature = "alloc_system_type", since = "1.28.0")] unsafe impl GlobalAlloc for System { #[inline] unsafe fn alloc(&self, layout: Layout) -> *mut u8 { - let ptr = ALLOC.lock().expect("Could not lock allocator mutex").alloc(layout); + let ptr = ALLOC.inner.lock().expect("Could not lock allocator mutex").allocate(layout); if let Some(ptr) = ptr { ptr.as_ptr() } else { crate::ptr::null_mut() } } @@ -16,8 +20,19 @@ unsafe impl GlobalAlloc for System { unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { let ptr = NonNull::new(ptr).expect("Invalid pointer"); - ALLOC.lock().expect("Could not lock allocator mutex").free(ptr, layout); + ALLOC.inner.lock().expect("Could not lock allocator mutex").free(ptr, layout); } } -static ALLOC: Mutex = Mutex::new(Allocator::new()); +impl Global { + const fn new() -> Self { + Self { inner: Mutex::new(BucketAllocator::new()) } + } +} + +unsafe impl Send for Global {} +unsafe impl Sync for Global {} + +static ALLOC: Global = Global::new(); + +// static ALLOC: Mutex = Mutex::new(BucketAllocator::new());