mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-21 11:56:38 +00:00
Merge branch 'overtrue/ci-batch1-gating' into overtrue/ci-batch1-needs
This commit is contained in:
+36
-1
@@ -12,9 +12,32 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
|
#[cfg(all(feature = "hotpath", feature = "hotpath-alloc"))]
|
||||||
|
use std::alloc::{GlobalAlloc, Layout};
|
||||||
|
|
||||||
|
#[cfg(all(feature = "hotpath", feature = "hotpath-alloc"))]
|
||||||
|
#[derive(Default)]
|
||||||
|
struct DefaultMiMalloc;
|
||||||
|
|
||||||
|
#[cfg(all(feature = "hotpath", feature = "hotpath-alloc"))]
|
||||||
|
// SAFETY: allocation and deallocation are forwarded unchanged to MiMalloc, so
|
||||||
|
// MiMalloc's GlobalAlloc guarantees apply to every returned pointer and layout.
|
||||||
|
#[allow(unsafe_code)]
|
||||||
|
unsafe impl GlobalAlloc for DefaultMiMalloc {
|
||||||
|
unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
|
||||||
|
// SAFETY: the caller upholds GlobalAlloc's contract for layout.
|
||||||
|
unsafe { mimalloc::MiMalloc.alloc(layout) }
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) {
|
||||||
|
// SAFETY: ptr and layout came from this allocator and are forwarded unchanged.
|
||||||
|
unsafe { mimalloc::MiMalloc.dealloc(ptr, layout) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(all(feature = "hotpath", feature = "hotpath-alloc"))]
|
#[cfg(all(feature = "hotpath", feature = "hotpath-alloc"))]
|
||||||
#[global_allocator]
|
#[global_allocator]
|
||||||
static GLOBAL: hotpath::CountingAllocator = hotpath::CountingAllocator::new();
|
static GLOBAL: hotpath::CountingAllocator<DefaultMiMalloc> = hotpath::CountingAllocator::new();
|
||||||
|
|
||||||
#[cfg(not(all(feature = "hotpath", feature = "hotpath-alloc")))]
|
#[cfg(not(all(feature = "hotpath", feature = "hotpath-alloc")))]
|
||||||
#[global_allocator]
|
#[global_allocator]
|
||||||
@@ -25,3 +48,15 @@ fn main() {
|
|||||||
|
|
||||||
rustfs::startup_entrypoint::run_process();
|
rustfs::startup_entrypoint::run_process();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(all(test, feature = "hotpath", feature = "hotpath-alloc"))]
|
||||||
|
mod tests {
|
||||||
|
#[test]
|
||||||
|
#[allow(unsafe_code)]
|
||||||
|
fn hotpath_allocator_uses_mimalloc() {
|
||||||
|
let allocation = Box::new([0_u8; 64]);
|
||||||
|
|
||||||
|
// SAFETY: the live Box pointer is valid to inspect for heap ownership.
|
||||||
|
assert!(unsafe { libmimalloc_sys::mi_is_in_heap_region(allocation.as_ptr().cast()) });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user