Remove an Arc holding module code from InstanceHandle (#2374)
We've generally moved to a model where `InstanceHandle` doesn't hold ownership of its internals, instead relying on the caller to manage that. This removes an allocation on the `Func::wrap` path but otherwise shouldn't have much impact.
This commit is contained in:
@@ -98,7 +98,11 @@ fn instantiate(
|
||||
#[derive(Clone)]
|
||||
pub struct Instance {
|
||||
pub(crate) handle: StoreInstanceHandle,
|
||||
store: Store,
|
||||
// Note that this is required to keep the module's code memory alive while
|
||||
// we have a handle to this `Instance`. We may eventually want to shrink
|
||||
// this to only hold onto the bare minimum each instance needs to allow
|
||||
// deallocating some `Module` resources early, but until then we just hold
|
||||
// on to everything.
|
||||
module: Module,
|
||||
}
|
||||
|
||||
@@ -170,7 +174,6 @@ impl Instance {
|
||||
|
||||
Ok(Instance {
|
||||
handle,
|
||||
store: store.clone(),
|
||||
module: module.clone(),
|
||||
})
|
||||
}
|
||||
@@ -180,7 +183,7 @@ impl Instance {
|
||||
/// This is the [`Store`] that generally serves as a sort of global cache
|
||||
/// for various instance-related things.
|
||||
pub fn store(&self) -> &Store {
|
||||
&self.store
|
||||
&self.handle.store
|
||||
}
|
||||
|
||||
/// Returns the list of exported items from this [`Instance`].
|
||||
|
||||
@@ -28,7 +28,6 @@ pub(crate) fn create_handle(
|
||||
unsafe {
|
||||
let handle = InstanceHandle::new(
|
||||
module,
|
||||
Arc::new(()),
|
||||
&finished_functions,
|
||||
imports,
|
||||
store.memory_creator(),
|
||||
|
||||
Reference in New Issue
Block a user