Skip to content

Commit

Permalink
Change the injection count of fuel in a store from u32 to u64 (#3048)
Browse files Browse the repository at this point in the history
* Change the injection count of fuel in a store from u32 to u64

This commit updates the type of the amount of times to inject fuel in
the `out_of_fuel_async_yield` to `u64` instead of `u32`. This should
allow effectively infinite fuel to get injected, even if a small amount
of fuel is injected per iteration.

Closes #2927
Closes #3046

* Fix tokio example
  • Loading branch information
alexcrichton authored Jul 1, 2021
1 parent 7453bd5 commit b9985fe
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 8 deletions.
2 changes: 1 addition & 1 deletion crates/wasmtime/src/func.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1606,7 +1606,7 @@ impl<T> Caller<'_, T> {
///
/// For more information see
/// [`Store::out_of_fuel_async_yield`](crate::Store::out_of_fuel_async_yield)
pub fn out_of_fuel_async_yield(&mut self, injection_count: u32, fuel_to_inject: u64) {
pub fn out_of_fuel_async_yield(&mut self, injection_count: u64, fuel_to_inject: u64) {
self.store
.out_of_fuel_async_yield(injection_count, fuel_to_inject)
}
Expand Down
8 changes: 4 additions & 4 deletions crates/wasmtime/src/store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ struct StoreInstance {
enum OutOfGas {
Trap,
InjectFuel {
injection_count: u32,
injection_count: u64,
fuel_to_inject: u64,
},
}
Expand Down Expand Up @@ -558,7 +558,7 @@ impl<T> Store<T> {
///
/// This method will panic if it is not called on a store associated with an [async
/// config](crate::Config::async_support).
pub fn out_of_fuel_async_yield(&mut self, injection_count: u32, fuel_to_inject: u64) {
pub fn out_of_fuel_async_yield(&mut self, injection_count: u64, fuel_to_inject: u64) {
self.inner
.out_of_fuel_async_yield(injection_count, fuel_to_inject)
}
Expand Down Expand Up @@ -655,7 +655,7 @@ impl<'a, T> StoreContextMut<'a, T> {
/// runs out.
///
/// For more information see [`Store::out_of_fuel_async_yield`]
pub fn out_of_fuel_async_yield(&mut self, injection_count: u32, fuel_to_inject: u64) {
pub fn out_of_fuel_async_yield(&mut self, injection_count: u64, fuel_to_inject: u64) {
self.0
.out_of_fuel_async_yield(injection_count, fuel_to_inject)
}
Expand Down Expand Up @@ -838,7 +838,7 @@ impl StoreInnermost {
self.out_of_gas_behavior = OutOfGas::Trap;
}

fn out_of_fuel_async_yield(&mut self, injection_count: u32, fuel_to_inject: u64) {
fn out_of_fuel_async_yield(&mut self, injection_count: u64, fuel_to_inject: u64) {
assert!(
self.async_support(),
"cannot use `out_of_fuel_async_yield` without enabling async support in the config"
Expand Down
4 changes: 2 additions & 2 deletions examples/tokio/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ async fn run_wasm(inputs: Inputs) -> Result<(), Error> {
let mut store = Store::new(&inputs.env.engine, wasi);

// WebAssembly execution will be paused for an async yield every time it
// consumes 10000 fuel. Fuel will be refilled u32::MAX times.
store.out_of_fuel_async_yield(u32::MAX, 10000);
// consumes 10000 fuel. Fuel will be refilled u64::MAX times.
store.out_of_fuel_async_yield(u64::MAX, 10000);

// Instantiate into our own unique store using the shared linker, afterwards
// acquiring the `_start` function for the module and executing it.
Expand Down
2 changes: 1 addition & 1 deletion tests/all/async_functions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@ fn iloop_with_fuel() {
fn fuel_eventually_finishes() {
let engine = Engine::new(Config::new().async_support(true).consume_fuel(true)).unwrap();
let mut store = Store::new(&engine, ());
store.out_of_fuel_async_yield(u32::max_value(), 10);
store.out_of_fuel_async_yield(u64::max_value(), 10);
let module = Module::new(
&engine,
"
Expand Down

0 comments on commit b9985fe

Please sign in to comment.