Fix borrow scope for store in WrappedCallable impl for WasmtimeFn.

This PR fixes the borrow scope of store in the `WrappedCallable` impl of
`WasmTimeFn` such that it does not remain borrowed across the call to
`wasmtime_call_trampoline`. By limiting the scope of the borrow, the
implementation can be reentered if an exported function calls an imported
function, which in turn calls another exported function.

Fixes #365.
This commit is contained in:
Peter Huene
2019-09-24 12:52:09 -07:00
committed by Dan Gohman
parent a666e14279
commit 4288f33440
5 changed files with 82 additions and 4 deletions

View File

@@ -56,9 +56,6 @@ impl WrappedCallable for WasmtimeFn {
_ => panic!("unexpected export type in Callable"),
};
let mut store = self.store.borrow_mut();
let context = store.context();
let value_size = mem::size_of::<u64>();
let mut values_vec: Vec<u64> = vec![0; max(params.len(), results.len())];
@@ -78,7 +75,10 @@ impl WrappedCallable for WasmtimeFn {
}
// Get the trampoline to call for this function.
let exec_code_buf = context
let exec_code_buf = self
.store
.borrow_mut()
.context()
.compiler()
.get_published_trampoline(body, &signature, value_size)
.map_err(|_| HostRef::new(Trap::fake()))?; //was ActionError::Setup)?;