bin-runner #36
4 changed files with 1266 additions and 226 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
|
@ -2747,6 +2747,7 @@ dependencies = [
|
||||||
name = "swactor-wasm-actor"
|
name = "swactor-wasm-actor"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"proptest",
|
||||||
"swactor",
|
"swactor",
|
||||||
"wasmtime",
|
"wasmtime",
|
||||||
"wat",
|
"wat",
|
||||||
|
|
|
||||||
|
|
@ -10,3 +10,4 @@ wasmtime = "29"
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
swactor = { path = "../..", features = ["getrandom"] }
|
swactor = { path = "../..", features = ["getrandom"] }
|
||||||
wat = "1"
|
wat = "1"
|
||||||
|
proptest = "1"
|
||||||
|
|
|
||||||
|
|
@ -41,12 +41,16 @@ impl ActorInterface for WasmActor {
|
||||||
};
|
};
|
||||||
|
|
||||||
// 2. Write message bytes into guest memory
|
// 2. Write message bytes into guest memory
|
||||||
self.memory.data_mut(&mut self.store)
|
let mem = self.memory.data_mut(&mut self.store);
|
||||||
[ptr as usize..(ptr as usize + bytes.len())]
|
let end = (ptr as usize).saturating_add(bytes.len());
|
||||||
.copy_from_slice(bytes);
|
if end > mem.len() {
|
||||||
|
return; // alloc returned OOB pointer — drop message
|
||||||
|
}
|
||||||
|
mem[ptr as usize..end].copy_from_slice(bytes);
|
||||||
|
|
||||||
// 3. Call guest handle
|
// 3. Call guest handle
|
||||||
if self.handle.call(&mut self.store, (ptr, len)).is_err() {
|
if self.handle.call(&mut self.store, (ptr, len)).is_err() {
|
||||||
|
self.store.data_mut().outbox.clear(); // discard sends from incomplete operation
|
||||||
return; // handle trapped — drop message, keep actor alive
|
return; // handle trapped — drop message, keep actor alive
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue