Skip to content

Commit d3afd51

Browse files
committed
add stream/future read/write cancellation support
Also, fix some issues with stream/future payload lifting/lowering which I _thought_ I had already tested but actually hadn't. Signed-off-by: Joel Dice <joel.dice@fermyon.com>
1 parent df459f7 commit d3afd51

File tree

2 files changed

+366
-79
lines changed

2 files changed

+366
-79
lines changed

crates/rust/src/interface.rs

Lines changed: 75 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,7 @@ macro_rules! {macro_name} {{
537537
let align = align.align_wasm32();
538538
let (lower, lift) = if let Some(payload_type) = payload_type {
539539
let lower =
540-
self.lower_to_memory("address", "value", &payload_type, &module);
540+
self.lower_to_memory("address", "&value", &payload_type, &module);
541541
let lift =
542542
self.lift_from_memory("address", "value", &payload_type, &module);
543543
(lower, lift)
@@ -617,6 +617,40 @@ impl {stream_and_future_support}::FuturePayload for {name} {{
617617
}}
618618
}}
619619
620+
fn cancel_write(writer: u32) {{
621+
#[cfg(not(target_arch = "wasm32"))]
622+
{{
623+
unreachable!();
624+
}}
625+
626+
#[cfg(target_arch = "wasm32")]
627+
{{
628+
#[link(wasm_import_module = "{module}")]
629+
extern "C" {{
630+
#[link_name = "[future-cancel-write-{index}]{func_name}"]
631+
fn cancel(_: u32) -> u32;
632+
}}
633+
unsafe {{ cancel(writer) }};
634+
}}
635+
}}
636+
637+
fn cancel_read(reader: u32) {{
638+
#[cfg(not(target_arch = "wasm32"))]
639+
{{
640+
unreachable!();
641+
}}
642+
643+
#[cfg(target_arch = "wasm32")]
644+
{{
645+
#[link(wasm_import_module = "{module}")]
646+
extern "C" {{
647+
#[link_name = "[future-cancel-read-{index}]{func_name}"]
648+
fn cancel(_: u32) -> u32;
649+
}}
650+
unsafe {{ cancel(reader) }};
651+
}}
652+
}}
653+
620654
fn close_writable(writer: u32) {{
621655
#[cfg(not(target_arch = "wasm32"))]
622656
{{
@@ -686,9 +720,9 @@ impl {stream_and_future_support}::FuturePayload for {name} {{
686720
)
687721
} else {
688722
let address = format!(
689-
"let address = {alloc}::alloc\
723+
"let address = unsafe {{ {alloc}::alloc\
690724
({alloc}::Layout::from_size_align_unchecked\
691-
({size} * values.len(), {align}));"
725+
({size} * values.len(), {align})) }};"
692726
);
693727
let lower = self.lower_to_memory(
694728
"address",
@@ -699,7 +733,7 @@ impl {stream_and_future_support}::FuturePayload for {name} {{
699733
let lower = format!(
700734
r#"
701735
for (index, value) in values.iter().enumerate() {{
702-
let address = address + (index * size);
736+
let address = unsafe {{ address.add(index * {size}) }};
703737
{lower}
704738
}}
705739
"#
@@ -712,10 +746,10 @@ for (index, value) in values.iter().enumerate() {{
712746
);
713747
let lift = format!(
714748
r#"
715-
for (index, dst) in values.iter_mut().enumerate() {{
716-
let address = address + (index * size);
749+
for (index, dst) in values.iter_mut().take(count).enumerate() {{
750+
let address = unsafe {{ address.add(index * {size}) }};
717751
{lift}
718-
*dst = value;
752+
dst.write(value);
719753
}}
720754
"#
721755
);
@@ -793,6 +827,40 @@ impl {stream_and_future_support}::StreamPayload for {name} {{
793827
}}
794828
}}
795829
830+
fn cancel_write(writer: u32) {{
831+
#[cfg(not(target_arch = "wasm32"))]
832+
{{
833+
unreachable!();
834+
}}
835+
836+
#[cfg(target_arch = "wasm32")]
837+
{{
838+
#[link(wasm_import_module = "{module}")]
839+
extern "C" {{
840+
#[link_name = "[stream-cancel-write-{index}]{func_name}"]
841+
fn cancel(_: u32) -> u32;
842+
}}
843+
unsafe {{ cancel(writer) }};
844+
}}
845+
}}
846+
847+
fn cancel_read(reader: u32) {{
848+
#[cfg(not(target_arch = "wasm32"))]
849+
{{
850+
unreachable!();
851+
}}
852+
853+
#[cfg(target_arch = "wasm32")]
854+
{{
855+
#[link(wasm_import_module = "{module}")]
856+
extern "C" {{
857+
#[link_name = "[stream-cancel-read-{index}]{func_name}"]
858+
fn cancel(_: u32) -> u32;
859+
}}
860+
unsafe {{ cancel(reader) }};
861+
}}
862+
}}
863+
796864
fn close_writable(writer: u32) {{
797865
#[cfg(not(target_arch = "wasm32"))]
798866
{{

0 commit comments

Comments
 (0)