pub trait ResourceLimiter {
    fn memory_growing(
        &mut self,
        current: usize,
        desired: usize,
        maximum: Option<usize>
    ) -> bool;
fn table_growing(
        &mut self,
        current: u32,
        desired: u32,
        maximum: Option<u32>
    ) -> bool; fn memory_grow_failed(&mut self, _error: &Error) { ... }
fn table_grow_failed(&mut self, _error: &Error) { ... }
fn instances(&self) -> usize { ... }
fn tables(&self) -> usize { ... }
fn memories(&self) -> usize { ... } }
Expand description

Used by hosts to limit resource consumption of instances.

An instance can be created with a resource limiter so that hosts can take into account non-WebAssembly resource usage to determine if a linear memory or table should grow.

Required methods

Notifies the resource limiter that an instance’s linear memory has been requested to grow.

  • current is the current size of the linear memory in bytes.
  • desired is the desired size of the linear memory in bytes.
  • maximum is either the linear memory’s maximum or a maximum from an instance allocator, also in bytes. A value of None indicates that the linear memory is unbounded.

This function should return true to indicate that the growing operation is permitted or false if not permitted. Returning true when a maximum has been exceeded will have no effect as the linear memory will not grow.

This function is not guaranteed to be invoked for all requests to memory.grow. Requests where the allocation requested size doesn’t fit in usize or exceeds the memory’s listed maximum size may not invoke this method.

Notifies the resource limiter that an instance’s table has been requested to grow.

  • current is the current number of elements in the table.
  • desired is the desired number of elements in the table.
  • maximum is either the table’s maximum or a maximum from an instance allocator. A value of None indicates that the table is unbounded.

This function should return true to indicate that the growing operation is permitted or false if not permitted. Returning true when a maximum has been exceeded will have no effect as the table will not grow.

Provided methods

Notifies the resource limiter that growing a linear memory, permitted by the memory_growing method, has failed.

Reasons for failure include: the growth exceeds the maximum passed to memory_growing, or the operating system failed to allocate additional memory. In that case, error might be downcastable to a std::io::Error.

Notifies the resource limiter that growing a linear memory, permitted by the table_growing method, has failed.

Reasons for failure include: the growth exceeds the maximum passed to table_growing. This could expand in the future.

The maximum number of instances that can be created for a Store.

Module instantiation will fail if this limit is exceeded.

This value defaults to 10,000.

The maximum number of tables that can be created for a Store.

Module instantiation will fail if this limit is exceeded.

This value defaults to 10,000.

The maximum number of linear memories that can be created for a Store

Instantiation will fail with an error if this limit is exceeded.

This value defaults to 10,000.

Implementors