Struct wasmer_wasix::WasiEnv

source ·
pub struct WasiEnv {
Show 17 fields pub control_plane: WasiControlPlane, pub process: WasiProcess, pub thread: WasiThread, pub layout: WasiMemoryLayout, pub vfork: Option<WasiVFork>, pub poll_seed: u64, pub(crate) state: Arc<WasiState>, pub bin_factory: BinFactory, pub owned_handles: Vec<WasiThreadHandle>, pub runtime: Arc<dyn Runtime + Send + Sync + 'static>, pub capabilities: Capabilities, pub enable_deep_sleep: bool, pub enable_journal: bool, pub enable_exponential_cpu_backoff: Option<Duration>, pub replaying_journal: bool, pub(crate) disable_fs_cleanup: bool, inner: WasiInstanceHandlesPointer,
}
Expand description

The environment provided to the WASI imports.

Fields§

§control_plane: WasiControlPlane§process: WasiProcess

Represents the process this environment is attached to

§thread: WasiThread

Represents the thread this environment is attached to

§layout: WasiMemoryLayout

Represents the layout of the memory

§vfork: Option<WasiVFork>

Represents a fork of the process that is currently in play

§poll_seed: u64

Seed used to rotate around the events returned by poll_oneoff

§state: Arc<WasiState>

Shared state of the WASI system. Manages all the data that the executing WASI program can see.

§bin_factory: BinFactory

Binary factory attached to this environment

§owned_handles: Vec<WasiThreadHandle>

List of the handles that are owned by this context (this can be used to ensure that threads own themselves or others)

§runtime: Arc<dyn Runtime + Send + Sync + 'static>

Implementation of the WASI runtime.

§capabilities: Capabilities§enable_deep_sleep: bool

Is this environment capable and setup for deep sleeping

§enable_journal: bool

Enables the snap shotting functionality

§enable_exponential_cpu_backoff: Option<Duration>

Enables an exponential backoff of the process CPU usage when there are no active run tokens (when set holds the maximum amount of time that it will pause the CPU)

§replaying_journal: bool

Flag that indicates if the environment is currently replaying the journal (and hence it should not record new events)

§disable_fs_cleanup: bool

Flag that indicates the cleanup of the environment is to be disabled (this is normally used so that the instance can be reused later on)

§inner: WasiInstanceHandlesPointer

Inner functions and references that are loaded before the environment starts (inner is not safe to send between threads and so it is private and will not be cloned when WasiEnv is cloned) TODO: We should move this outside of WasiEnv with some refactoring

Implementations§

source§

impl WasiEnv

source

pub fn builder(program_name: impl Into<String>) -> WasiEnvBuilder

Construct a new WasiEnvBuilder that allows customizing an environment.

source

pub fn fork(&self) -> Result<(Self, WasiThreadHandle), ControlPlaneError>

Forking the WasiState is used when either fork or vfork is called

source

pub fn pid(&self) -> WasiProcessId

source

pub fn tid(&self) -> WasiThreadId

source

pub fn will_use_asyncify(&self) -> bool

Returns true if this WASM process will need and try to use asyncify while its running which normally means.

source

pub fn reinit(&mut self) -> Result<(), WasiStateCreationError>

Re-initializes this environment so that it can be executed again

source

pub unsafe fn capable_of_deep_sleep(&self) -> bool

Returns true if this module is capable of deep sleep (needs asyncify to unwind and rewin)

§Safety

This function should only be called from within a syscall as it accessed objects that are a thread local (functions)

source

pub fn layout(&self) -> &WasiMemoryLayout

Returns true if this thread can go into a deep sleep

source

pub(crate) fn from_init( init: WasiEnvInit, module_hash: ModuleHash, ) -> Result<Self, WasiRuntimeError>

source

pub(crate) fn instantiate( init: WasiEnvInit, module: Module, module_hash: ModuleHash, store: &mut impl AsStoreMut, ) -> Result<(Instance, WasiFunctionEnv), WasiRuntimeError>

source

pub fn runtime(&self) -> &(dyn Runtime + Send + Sync)

Returns a copy of the current runtime implementation for this environment

source

pub fn tasks(&self) -> &Arc<dyn VirtualTaskManager>

Returns a copy of the current tasks implementation for this environment

source

pub fn fs_root(&self) -> &WasiFsRoot

source

pub fn set_runtime<R>(&mut self, runtime: R)
where R: Runtime + Send + Sync + 'static,

Overrides the runtime implementation for this environment

source

pub fn active_threads(&self) -> u32

Returns the number of active threads

source

pub fn process_signals_and_exit( ctx: &mut FunctionEnvMut<'_, Self>, ) -> WasiResult<bool>

Porcesses any signals that are batched up or any forced exit codes

source

pub(crate) fn process_signals( ctx: &mut FunctionEnvMut<'_, Self>, ) -> WasiResult<bool>

Porcesses any signals that are batched up

source

pub(crate) fn process_signals_internal( ctx: &mut FunctionEnvMut<'_, Self>, signals: Vec<Signal>, ) -> Result<bool, WasiError>

source

pub fn should_exit(&self) -> Option<ExitCode>

Returns an exit code if the thread or process has been forced to exit

source

pub fn net(&self) -> &DynVirtualNetworking

Accesses the virtual networking implementation

source

pub(crate) unsafe fn inner(&self) -> &'_ WasiInstanceHandles

Providers safe access to the initialized part of WasiEnv (it must be initialized before it can be used) This has been marked as unsafe as it will panic if its executed on the wrong thread or before the inner is set

source

pub(crate) fn try_inner(&self) -> Option<&'_ WasiInstanceHandles>

Providers safe access to the initialized part of WasiEnv

source

pub(crate) fn try_inner_mut(&mut self) -> Option<&'_ mut WasiInstanceHandles>

Providers safe access to the initialized part of WasiEnv (it must be initialized before it can be used)

source

pub fn try_clone_instance(&self) -> Option<Instance>

Tries to clone the instance from this environment

source

pub(crate) fn try_memory(&self) -> Option<&'_ Memory>

Providers safe access to the memory (it must be initialized before it can be used)

source

pub(crate) unsafe fn memory(&self) -> &'_ Memory

Providers safe access to the memory (it must be initialized before it can be used) This has been marked as unsafe as it will panic if its executed on the wrong thread or before the inner is set

source

pub(crate) fn try_memory_view<'a>( &self, store: &'a (impl AsStoreRef + ?Sized), ) -> Option<MemoryView<'a>>

Providers safe access to the memory (it must be initialized before it can be used)

source

pub(crate) unsafe fn memory_view<'a>( &self, store: &'a (impl AsStoreRef + ?Sized), ) -> MemoryView<'a>

Providers safe access to the memory (it must be initialized before it can be used) This has been marked as unsafe as it will panic if its executed on the wrong thread or before the inner is set

source

pub(crate) fn try_memory_clone(&self) -> Option<Memory>

Copy the lazy reference so that when it’s initialized during the export phase, all the other references get a copy of it

source

pub(crate) fn state(&self) -> &WasiState

Get the WASI state

source

pub fn stdout( &self, ) -> Result<Option<Box<dyn VirtualFile + Send + Sync + 'static>>, FsError>

Get the VirtualFile object at stdout

source

pub fn stderr( &self, ) -> Result<Option<Box<dyn VirtualFile + Send + Sync + 'static>>, FsError>

Get the VirtualFile object at stderr

source

pub fn stdin( &self, ) -> Result<Option<Box<dyn VirtualFile + Send + Sync + 'static>>, FsError>

Get the VirtualFile object at stdin

source

pub fn should_journal(&self) -> bool

Returns true if the process should perform snapshots or not

source

pub fn has_active_journal(&self) -> bool

Returns true if the environment has an active journal

source

pub fn active_journal(&self) -> Result<&DynJournal, Errno>

Returns the active journal or fails with an error

source

pub fn has_snapshot_trigger(&self, trigger: SnapshotTrigger) -> bool

Returns true if a particular snapshot trigger is enabled

source

pub fn pop_snapshot_trigger(&mut self, trigger: SnapshotTrigger) -> bool

Returns true if a particular snapshot trigger is enabled

source

pub fn std_dev_get( &self, fd: Fd, ) -> Result<Option<Box<dyn VirtualFile + Send + Sync + 'static>>, FsError>

Internal helper function to get a standard device handle. Expects one of __WASI_STDIN_FILENO, __WASI_STDOUT_FILENO, __WASI_STDERR_FILENO.

source

pub(crate) unsafe fn get_memory_and_wasi_state<'a>( &'a self, store: &'a impl AsStoreRef, _mem_index: u32, ) -> (MemoryView<'a>, &WasiState)

Unsafe:

This will access the memory of the WASM process and create a view into it which is inherently unsafe as it could corrupt the memory. Also accessing the memory is not thread safe.

source

pub(crate) unsafe fn get_memory_and_wasi_state_and_inodes<'a>( &'a self, store: &'a impl AsStoreRef, _mem_index: u32, ) -> (MemoryView<'a>, &WasiState, &WasiInodes)

Unsafe:

This will access the memory of the WASM process and create a view into it which is inherently unsafe as it could corrupt the memory. Also accessing the memory is not thread safe.

source

pub(crate) fn get_wasi_state_and_inodes(&self) -> (&WasiState, &WasiInodes)

source

pub fn use_package( &self, pkg: &BinaryPackage, ) -> Result<(), WasiStateCreationError>

source

pub async fn use_package_async( &self, pkg: &BinaryPackage, ) -> Result<(), WasiStateCreationError>

Make all the commands in a BinaryPackage available to the WASI instance.

The BinaryPackageCommand::atom() will be saved to /bin/command.

This will also merge the command’s filesystem (BinaryPackage::webc_fs) into the current filesystem.

source

pub fn uses<I>(&self, uses: I) -> Result<(), WasiStateCreationError>
where I: IntoIterator<Item = String>,

Given a list of packages, load them from the registry and make them available.

source

pub fn map_commands( &self, map_commands: HashMap<String, PathBuf>, ) -> Result<(), WasiStateCreationError>

source

pub fn blocking_on_exit(&self, process_exit_code: Option<ExitCode>)

Cleans up all the open files (if this is the main thread)

source

pub fn on_exit( &self, process_exit_code: Option<ExitCode>, ) -> BoxFuture<'static, ()>

Cleans up all the open files (if this is the main thread)

source

pub fn prepare_spawn(&self, cmd: &BinaryPackageCommand)

Trait Implementations§

source§

impl Clone for WasiEnv

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for WasiEnv

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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> CloneToUninit for T
where T: Clone,

source§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> DynClone for T
where T: Clone,

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> 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

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

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

§

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>,

§

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> Upcastable for T
where T: Any + Debug + 'static,

§

fn upcast_any_ref(&self) -> &(dyn Any + 'static)

§

fn upcast_any_mut(&mut self) -> &mut (dyn Any + 'static)

§

fn upcast_any_box(self: Box<T>) -> Box<dyn Any>

§

impl<T> Upcastable for T
where T: Any + Send + Sync + 'static,

§

fn upcast_any_ref(&self) -> &(dyn Any + 'static)

upcast ref
§

fn upcast_any_mut(&mut self) -> &mut (dyn Any + 'static)

upcast mut ref
§

fn upcast_any_box(self: Box<T>) -> Box<dyn Any>

upcast boxed dyn
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

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
§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,