Fixed the asyncify call loop which was lost in the merge

This commit is contained in:
John Sharratt's Shared Account
2022-11-12 14:04:28 +11:00
parent 40a064d1a1
commit 461a5abd4e
2 changed files with 32 additions and 10 deletions

View File

@@ -93,15 +93,31 @@ macro_rules! impl_native_traits {
}
rets_list.as_mut()
};
unsafe {
wasmer_vm::wasmer_call_trampoline(
store.as_store_ref().signal_handler(),
anyfunc.vmctx,
anyfunc.call_trampoline,
anyfunc.func_ptr,
args_rets.as_mut_ptr() as *mut u8,
)
}?;
let mut r;
loop {
r = unsafe {
wasmer_vm::wasmer_call_trampoline(
store.as_store_ref().signal_handler(),
anyfunc.vmctx,
anyfunc.call_trampoline,
anyfunc.func_ptr,
args_rets.as_mut_ptr() as *mut u8,
)
};
let store_mut = store.as_store_mut();
if let Some(callback) = store_mut.inner.on_called.take() {
match callback(store_mut) {
Ok(wasmer_types::OnCalledAction::InvokeAgain) => { continue; }
Ok(wasmer_types::OnCalledAction::Finish) => { break; }
Ok(wasmer_types::OnCalledAction::Trap(trap)) => { return Err(RuntimeError::user(trap)) },
Err(trap) => { return Err(RuntimeError::user(trap)) },
}
}
break;
}
r?;
let num_rets = rets_list.len();
if !using_rets_array && num_rets > 0 {
let src_pointer = params_list.as_ptr();