make ResourceLimiter operate on Store data; add hooks for entering and exiting native code (#2952)
* wasmtime_runtime: move ResourceLimiter defaults into this crate In preparation of changing wasmtime::ResourceLimiter to be a re-export of this definition, because translating between two traits was causing problems elsewhere. * wasmtime: make ResourceLimiter a re-export of wasmtime_runtime::ResourceLimiter * refactor Store internals to support ResourceLimiter as part of store's data * add hooks for entering and exiting native code to Store * wasmtime-wast, fuzz: changes to adapt ResourceLimiter API * fix tests * wrap calls into wasm with entering/exiting exit hooks as well * the most trivial test found a bug, lets write some more * store: mark some methods as #[inline] on Store, StoreInner, StoreInnerMost Co-authored-By: Alex Crichton <alex@alexcrichton.com> * improve tests for the entering/exiting native hooks Co-authored-by: Alex Crichton <alex@alexcrichton.com>
This commit is contained in:
@@ -217,8 +217,8 @@ fn limit_instances() -> Result<()> {
|
||||
)
|
||||
"#,
|
||||
)?;
|
||||
let mut store = Store::new(&engine, ());
|
||||
store.limiter(StoreLimitsBuilder::new().instances(10).build());
|
||||
let mut store = Store::new(&engine, StoreLimitsBuilder::new().instances(10).build());
|
||||
store.limiter(|s| s as &mut dyn ResourceLimiter);
|
||||
let err = Instance::new(&mut store, &module, &[]).err().unwrap();
|
||||
assert!(
|
||||
err.to_string().contains("resource limit exceeded"),
|
||||
@@ -253,8 +253,8 @@ fn limit_memories() -> Result<()> {
|
||||
)
|
||||
"#,
|
||||
)?;
|
||||
let mut store = Store::new(&engine, ());
|
||||
store.limiter(StoreLimitsBuilder::new().memories(10).build());
|
||||
let mut store = Store::new(&engine, StoreLimitsBuilder::new().memories(10).build());
|
||||
store.limiter(|s| s as &mut dyn ResourceLimiter);
|
||||
let err = Instance::new(&mut store, &module, &[]).err().unwrap();
|
||||
assert!(
|
||||
err.to_string().contains("resource limit exceeded"),
|
||||
@@ -288,8 +288,8 @@ fn limit_tables() -> Result<()> {
|
||||
)
|
||||
"#,
|
||||
)?;
|
||||
let mut store = Store::new(&engine, ());
|
||||
store.limiter(StoreLimitsBuilder::new().tables(10).build());
|
||||
let mut store = Store::new(&engine, StoreLimitsBuilder::new().tables(10).build());
|
||||
store.limiter(|s| s as &mut dyn ResourceLimiter);
|
||||
let err = Instance::new(&mut store, &module, &[]).err().unwrap();
|
||||
assert!(
|
||||
err.to_string().contains("resource limit exceeded"),
|
||||
|
||||
Reference in New Issue
Block a user