Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/crates/fuzzing/src/generators/async_config.rs
1693 views
1
use arbitrary::{Arbitrary, Unstructured};
2
use std::time::Duration;
3
4
/// Configuration for async support within a store.
5
///
6
/// Note that the `Arbitrary` implementation for this type always returns
7
/// `Disabled` because this is something that is statically chosen if the fuzzer
8
/// has support for async.
9
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10
pub enum AsyncConfig {
11
/// No async support enabled.
12
Disabled,
13
/// Async support is enabled and cooperative yielding is done with fuel.
14
YieldWithFuel(u64),
15
/// Async support is enabled and cooperative yielding is done with epochs.
16
YieldWithEpochs {
17
/// Duration between epoch ticks.
18
dur: Duration,
19
/// Number of ticks between yields.
20
ticks: u64,
21
},
22
}
23
24
impl AsyncConfig {
25
/// Applies this async configuration to the `wasmtime::Config` provided to
26
/// ensure it's ready to execute with the resulting modules.
27
pub fn configure(&self, config: &mut wasmtime::Config) {
28
match self {
29
AsyncConfig::Disabled => {}
30
AsyncConfig::YieldWithFuel(_) => {
31
config.async_support(true).consume_fuel(true);
32
}
33
AsyncConfig::YieldWithEpochs { .. } => {
34
config.async_support(true).epoch_interruption(true);
35
}
36
}
37
}
38
}
39
40
impl<'a> Arbitrary<'a> for AsyncConfig {
41
fn arbitrary(_: &mut Unstructured<'a>) -> arbitrary::Result<AsyncConfig> {
42
Ok(AsyncConfig::Disabled)
43
}
44
}
45
46