[][src]Struct sunrise_kernel::heap_allocator::Allocator

pub struct Allocator(Once<SpinLock<Heap>>);

Simple wrapper around linked_list_allocator, growing heap by allocating pages with the frame allocator as necessary.

Implementations

impl Allocator[src]

fn expand(&self, by: usize)[src]

Safely expands the heap if possible.

fn init() -> SpinLock<Heap>[src]

Create a new Heap of RESERVED_HEAP_SIZE bytes.

pub const fn new() -> Allocator[src]

Creates a new heap based off of loader settings.

Methods from Deref<Target = SpinLock<Heap>>

pub fn lock(&self) -> SpinLockGuard<T>[src]

Locks the spinlock and returns a guard.

The returned value may be dereferenced for data access and the lock will be dropped when the guard falls out of scope.

Panics if called in an interrupt context.

let mylock = crate::sync::SpinLock::new(0);
{
    let mut data = mylock.lock();
    // The lock is now locked and the data can be accessed
    *data += 1;
    // The lock is implicitly dropped
}

pub unsafe fn force_unlock(&self)[src]

Force unlock the spinlock. If the lock isn't held, this is a no-op.

Safety

This is extremely unsafe if the lock is not held by the current thread. However, this can be useful in some instances for exposing the lock to FFI that doesn't know how to deal with RAII.

pub fn try_lock(&self) -> Option<SpinLockGuard<T>>[src]

Tries to lock the spinlock. If it is already locked, it will return None. Otherwise it returns a guard within Some.

Trait Implementations

impl Deref for Allocator[src]

type Target = SpinLock<Heap>

The resulting type after dereferencing.

impl<'a> GlobalAlloc for Allocator[src]

Auto Trait Implementations

impl !RefUnwindSafe for Allocator

impl Send for Allocator

impl Sync for Allocator

impl Unpin for Allocator

impl !UnwindSafe for Allocator

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.