feat: extended features and testing for the WASM runtime actor prototype (#36)
This commit is contained in:
parent
b4312676a6
commit
29b4f53d69
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"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"proptest",
|
||||
"swactor",
|
||||
"wasmtime",
|
||||
"wat",
|
||||
|
|
|
|||
|
|
@ -10,3 +10,4 @@ wasmtime = "29"
|
|||
[dev-dependencies]
|
||||
swactor = { path = "../..", features = ["getrandom"] }
|
||||
wat = "1"
|
||||
proptest = "1"
|
||||
|
|
|
|||
|
|
@ -41,12 +41,16 @@ impl ActorInterface for WasmActor {
|
|||
};
|
||||
|
||||
// 2. Write message bytes into guest memory
|
||||
self.memory.data_mut(&mut self.store)
|
||||
[ptr as usize..(ptr as usize + bytes.len())]
|
||||
.copy_from_slice(bytes);
|
||||
let mem = self.memory.data_mut(&mut self.store);
|
||||
let end = (ptr as usize).saturating_add(bytes.len());
|
||||
if end > mem.len() {
|
||||
return; // alloc returned OOB pointer — drop message
|
||||
}
|
||||
mem[ptr as usize..end].copy_from_slice(bytes);
|
||||
|
||||
// 3. Call guest handle
|
||||
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
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue