Compare commits
12 commits
5cba8bdcd8
...
a24d5415eb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a24d5415eb | ||
|
|
83aabc26e1 | ||
|
|
7425e484a1 | ||
|
|
25e791ae9b | ||
|
|
63fd6d0d5f | ||
|
|
edd9558f47 | ||
|
|
29a16a335e | ||
|
|
eeb2182a3b | ||
|
|
d54f476f25 | ||
|
|
8342c16de4 | ||
|
|
fd8f4b2a05 | ||
| 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"
|
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