allocator and linux signal cleanup in platform

This commit is contained in:
auronandace
2026-02-22 08:43:20 +00:00
parent 53cc0e5aed
commit dc4542e81c
2 changed files with 30 additions and 25 deletions
+7 -7
View File
@@ -27,7 +27,7 @@ unsafe impl Allocator for System {
fn alloc(&self, size: usize) -> (*mut u8, usize, u32) {
let Ok(addr) = (unsafe {
Sys::mmap(
0 as *mut _,
ptr::null_mut(),
size,
sys_mman::PROT_WRITE | sys_mman::PROT_READ,
sys_mman::MAP_ANON | sys_mman::MAP_PRIVATE,
@@ -37,30 +37,30 @@ unsafe impl Allocator for System {
}) else {
return (ptr::null_mut(), 0, 0);
};
(addr as *mut u8, size, 0)
(addr.cast::<u8>(), size, 0)
}
fn remap(&self, ptr: *mut u8, oldsize: usize, newsize: usize, can_move: bool) -> *mut u8 {
let flags = if can_move { MREMAP_MAYMOVE } else { 0 };
let Ok(ptr) =
(unsafe { Sys::mremap(ptr as *mut _, oldsize, newsize, flags, ptr::null_mut()) })
(unsafe { Sys::mremap(ptr.cast(), oldsize, newsize, flags, ptr::null_mut()) })
else {
return ptr::null_mut();
};
ptr as *mut u8
ptr.cast::<u8>()
}
fn free_part(&self, ptr: *mut u8, oldsize: usize, newsize: usize) -> bool {
unsafe {
if Sys::mremap(ptr as *mut _, oldsize, newsize, 0, ptr::null_mut()).is_ok() {
if Sys::mremap(ptr.cast(), oldsize, newsize, 0, ptr::null_mut()).is_ok() {
return true;
}
Sys::munmap(ptr.add(newsize) as *mut _, oldsize - newsize).is_ok()
Sys::munmap(ptr.add(newsize).cast(), oldsize - newsize).is_ok()
}
}
fn free(&self, ptr: *mut u8, size: usize) -> bool {
unsafe { Sys::munmap(ptr as *mut _, size).is_ok() }
unsafe { Sys::munmap(ptr.cast(), size).is_ok() }
}
fn can_release_part(&self, _flags: u32) -> bool {