Struct StoreContext

Source
pub(crate) struct StoreContext {
    id: StoreId,
    borrow_count: u32,
    entry: UnsafeCell<StoreContextEntry>,
}

Fields§

§id: StoreId§borrow_count: u32§entry: UnsafeCell<StoreContextEntry>

Implementations§

Source§

impl StoreContext

Source

fn is_active(id: StoreId) -> bool

Source

fn is_suspended(id: StoreId) -> bool

Source

fn install(id: StoreId, entry: StoreContextEntry)

Source

pub(crate) fn is_empty() -> bool

Returns true if there are no active store context entries.

Source

pub(crate) fn install_async( guard: LocalRwLockWriteGuard<Box<StoreInner>>, ) -> ForcedStoreInstallGuard

The write guard ensures this is the only reference to the store, so installation can never fail.

Source

pub(crate) unsafe fn ensure_installed( store_ptr: *mut StoreInner, ) -> StoreInstallGuard

Install the store context as sync if it is not already installed.

§Safety

The pointer must be dereferenceable and remain valid until the store context is uninstalled.

Source

pub(crate) unsafe fn pause(id: StoreId) -> StorePtrPauseGuard

“Pause” one borrow of the store context.

§Safety

Code must ensure it does not use the StorePtrWrapper or StoreAsyncGuardWrapper that it owns, or any StoreRef/StoreMut derived from them, while the store context is paused.

The safe, correct use-case for this method is to pause the store context while executing WASM code, which cannot use the store context directly. This allows an async context to uninstall the store context when suspending if it’s called from a sync imported function. The imported function will have borrowed the store context in its trampoline, which will prevent the async context from uninstalling the store. However, since the imported function passes a mutable borrow of its store into Function::call, it will expect the store to change before the call returns.

Source

pub(crate) unsafe fn get_current(id: StoreId) -> StorePtrWrapper

Safety: This method lets you borrow multiple mutable references to the currently active store context. The caller must ensure that:

  • there is only one mutable reference alive, or
  • all but one mutable reference are inaccessible and passed into a function that lost the reference (e.g. into WASM code)

The intended, valid use-case for this method is from within imported function trampolines.

Source

pub(crate) unsafe fn get_current_transient(id: StoreId) -> *mut StoreInner

Safety: In addition to the safety requirements of Self::get_current, the pointer returned from this function will become invalid if the store context is changed in any way (via installing or uninstalling a store context). The caller must ensure that the store context remains unchanged as long as the pointer is being accessed.

Source

pub(crate) unsafe fn try_get_current(id: StoreId) -> Option<StorePtrWrapper>

Safety: See Self::get_current.

Source

pub(crate) unsafe fn try_get_current_async( id: StoreId, ) -> GetStoreAsyncGuardResult

Safety: See Self::get_current.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> ArchivePointee for T

§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> LayoutRaw for T

§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Returns the layout of the type.
§

impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
where T: SharedNiching<N1, N2>, N1: Niching<T>, N2: Niching<T>,

§

unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool

Returns whether the given value has been niched. Read more
§

fn resolve_niched(out: Place<NichedOption<T, N1>>)

Writes data to out indicating that a T is niched.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> Pointee for T

§

type Metadata = ()

The metadata type for pointers and references to this type.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more