wiggle: make the dummy executor return a trap rather than panic
when configured improperly
This commit is contained in:
@@ -149,7 +149,7 @@ fn generate_func(
|
|||||||
#field_str,
|
#field_str,
|
||||||
move |mut caller: #rt::wasmtime_crate::Caller<'_, T> #(, #arg_decls)*| -> Result<#ret_ty, #rt::wasmtime_crate::Trap> {
|
move |mut caller: #rt::wasmtime_crate::Caller<'_, T> #(, #arg_decls)*| -> Result<#ret_ty, #rt::wasmtime_crate::Trap> {
|
||||||
let result = async { #body };
|
let result = async { #body };
|
||||||
#rt::run_in_dummy_executor(result)
|
#rt::run_in_dummy_executor(result)?
|
||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -933,7 +933,7 @@ impl From<GuestError> for Trap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_in_dummy_executor<F: std::future::Future>(future: F) -> F::Output {
|
pub fn run_in_dummy_executor<F: std::future::Future>(future: F) -> Result<F::Output, Trap> {
|
||||||
use std::pin::Pin;
|
use std::pin::Pin;
|
||||||
use std::task::{Context, Poll, RawWaker, RawWakerVTable, Waker};
|
use std::task::{Context, Poll, RawWaker, RawWakerVTable, Waker};
|
||||||
|
|
||||||
@@ -941,10 +941,9 @@ pub fn run_in_dummy_executor<F: std::future::Future>(future: F) -> F::Output {
|
|||||||
let waker = dummy_waker();
|
let waker = dummy_waker();
|
||||||
let mut cx = Context::from_waker(&waker);
|
let mut cx = Context::from_waker(&waker);
|
||||||
match f.as_mut().poll(&mut cx) {
|
match f.as_mut().poll(&mut cx) {
|
||||||
Poll::Ready(val) => return val,
|
Poll::Ready(val) => return Ok(val),
|
||||||
Poll::Pending => {
|
Poll::Pending =>
|
||||||
panic!("Cannot wait on pending future: must enable wiggle \"async\" future and execute on an async Store")
|
return Err(Trap::String("Cannot wait on pending future: must enable wiggle \"async\" future and execute on an async Store".to_owned()))
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn dummy_waker() -> Waker {
|
fn dummy_waker() -> Waker {
|
||||||
|
|||||||
Reference in New Issue
Block a user