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:
Alex Crichton
2020-11-06 16:16:47 -06:00
committed by GitHub
parent 73cda83548
commit 12e658a1ef
4 changed files with 6 additions and 10 deletions

View File

@@ -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`].

View File

@@ -28,7 +28,6 @@ pub(crate) fn create_handle(
unsafe {
let handle = InstanceHandle::new(
module,
Arc::new(()),
&finished_functions,
imports,
store.memory_creator(),