From 92576fdcfd3e32dce63b533ab20d4974136b097d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Sat, 16 Mar 2024 00:59:18 +0000 Subject: fix(ext/node): support MessagePort in `WorkerOptions.workerData` (#22950) This commit fixes passing `MessagePort` instances to `WorkerOptions.workerData`. Before they were not serialized and deserialized properly when spawning a worker thread. Closes https://github.com/denoland/deno/issues/22935 --- ext/web/lib.rs | 3 +++ ext/web/message_port.rs | 11 +++++------ 2 files changed, 8 insertions(+), 6 deletions(-) (limited to 'ext') diff --git a/ext/web/lib.rs b/ext/web/lib.rs index 60a0cc0d7..74ed78c7e 100644 --- a/ext/web/lib.rs +++ b/ext/web/lib.rs @@ -43,12 +43,15 @@ pub use crate::blob::BlobStore; pub use crate::blob::InMemoryBlobPart; pub use crate::message_port::create_entangled_message_port; +pub use crate::message_port::deserialize_js_transferables; use crate::message_port::op_message_port_create_entangled; use crate::message_port::op_message_port_post_message; use crate::message_port::op_message_port_recv_message; use crate::message_port::op_message_port_recv_message_sync; +pub use crate::message_port::serialize_transferables; pub use crate::message_port::JsMessageData; pub use crate::message_port::MessagePort; +pub use crate::message_port::Transferable; use crate::timers::op_defer; use crate::timers::op_now; diff --git a/ext/web/message_port.rs b/ext/web/message_port.rs index 18429a179..1cd29c64d 100644 --- a/ext/web/message_port.rs +++ b/ext/web/message_port.rs @@ -22,7 +22,7 @@ use tokio::sync::mpsc::unbounded_channel; use tokio::sync::mpsc::UnboundedReceiver; use tokio::sync::mpsc::UnboundedSender; -enum Transferable { +pub enum Transferable { MessagePort(MessagePort), ArrayBuffer(u32), } @@ -140,7 +140,7 @@ pub enum JsTransferable { ArrayBuffer(u32), } -fn deserialize_js_transferables( +pub fn deserialize_js_transferables( state: &mut OpState, js_transferables: Vec, ) -> Result, AnyError> { @@ -165,7 +165,7 @@ fn deserialize_js_transferables( Ok(transferables) } -fn serialize_transferables( +pub fn serialize_transferables( state: &mut OpState, transferables: Vec, ) -> Vec { @@ -189,8 +189,8 @@ fn serialize_transferables( #[derive(Deserialize, Serialize)] pub struct JsMessageData { - data: DetachedBuffer, - transferables: Vec, + pub data: DetachedBuffer, + pub transferables: Vec, } #[op2] @@ -208,7 +208,6 @@ pub fn op_message_port_post_message( } let resource = state.resource_table.get::(rid)?; - resource.port.send(state, data) } -- cgit v1.2.3