From 4d5f71df4bf191255cfcf1f5ae82d8b8c2183aa9 Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Thu, 18 Dec 2025 23:43:59 +0300 Subject: [PATCH] Safety improvements in virtual memory and ability to share references --- src/virtual_memory.rs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/virtual_memory.rs b/src/virtual_memory.rs index af87e20..97bd74c 100644 --- a/src/virtual_memory.rs +++ b/src/virtual_memory.rs @@ -1,18 +1,24 @@ -use std::ptr::{NonNull, null}; - pub unsafe trait VirtualMemoryApi: Sized + Drop { - type Reservation: Reservation; + type Reservation<'s>: Reservation + 's + where + Self: 's; fn getPageSize(&self) -> usize; - fn reserveMemory( - &mut self, - extend: Option<&Self::Reservation>, + fn reserveMemory<'s>( + &'s self, + extend: ReservationToExtend<&Self::Reservation<'s>>, pagesCount: usize, - ) -> Self::Reservation; + ) -> Option>; +} + +pub enum ReservationToExtend { + ReserveAnywhere, + TryExtend(T), } pub unsafe trait Reservation: Sized + Ord + Drop { - fn commitPages(&mut self, indexOfFirst: usize, count: usize) -> *mut [u8]; - fn decommitPages(&mut self, indexOfFirst: usize, count: usize); + unsafe fn commitPages(&mut self, indexOfFirst: usize, count: usize) -> *mut [u8]; + unsafe fn decommitPages(&mut self, indexOfFirst: usize, count: usize); + unsafe fn release(self); }