From 49f5f289777476e3892c464eaf0631d70a0aa071 Mon Sep 17 00:00:00 2001 From: pavelsavara Date: Wed, 2 Aug 2023 13:20:04 +0200 Subject: [PATCH 1/2] fix for delayed WS close event on NodeJs --- src/mono/wasm/runtime/marshal-to-cs.ts | 4 +++- src/mono/wasm/runtime/web-socket.ts | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/mono/wasm/runtime/marshal-to-cs.ts b/src/mono/wasm/runtime/marshal-to-cs.ts index 66f10166f35b1d..a0f5b58a5cd332 100644 --- a/src/mono/wasm/runtime/marshal-to-cs.ts +++ b/src/mono/wasm/runtime/marshal-to-cs.ts @@ -347,7 +347,9 @@ function _marshal_task_to_cs(arg: JSMarshalerArgument, value: Promise, _?: teardown_managed_proxy(holder, gc_handle); // this holds holder alive for finalizer, until the promise is freed } catch (ex) { - mono_log_warn("Exception marshalling error of JS promise to CS: ", ex); + if (!loaderHelpers.is_exited()) { + mono_log_warn("Exception marshalling error of JS promise to CS: ", ex); + } } }); } diff --git a/src/mono/wasm/runtime/web-socket.ts b/src/mono/wasm/runtime/web-socket.ts index b5de8be473a9af..8344942111f276 100644 --- a/src/mono/wasm/runtime/web-socket.ts +++ b/src/mono/wasm/runtime/web-socket.ts @@ -102,6 +102,14 @@ export function ws_wasm_create(uri: string, sub_protocols: string[] | null, rece ws.addEventListener("open", local_on_open, { once: true }); ws.addEventListener("close", local_on_close, { once: true }); ws.addEventListener("error", local_on_error, { once: true }); + ws.dispose = () => { + ws.removeEventListener("message", local_on_message); + ws.removeEventListener("open", local_on_open); + ws.removeEventListener("close", local_on_close); + ws.removeEventListener("error", local_on_error); + reject_promises(ws, new Error("WebSocket aborted")); + ws_wasm_abort(ws); + }; return ws; } @@ -396,6 +404,7 @@ type WebSocketExtension = WebSocket & { [wasm_ws_pending_send_buffer_offset]: number [wasm_ws_pending_send_buffer_type]: number [wasm_ws_pending_send_buffer]: Uint8Array | null + dispose(): void } type ReceivePromiseControl = PromiseController & { From 5eb138baf873eaa7235f33e5b4131bdd83573240 Mon Sep 17 00:00:00 2001 From: pavelsavara Date: Wed, 2 Aug 2023 13:22:39 +0200 Subject: [PATCH 2/2] fix --- src/mono/wasm/runtime/web-socket.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mono/wasm/runtime/web-socket.ts b/src/mono/wasm/runtime/web-socket.ts index 8344942111f276..7d25310d4f9513 100644 --- a/src/mono/wasm/runtime/web-socket.ts +++ b/src/mono/wasm/runtime/web-socket.ts @@ -107,7 +107,6 @@ export function ws_wasm_create(uri: string, sub_protocols: string[] | null, rece ws.removeEventListener("open", local_on_open); ws.removeEventListener("close", local_on_close); ws.removeEventListener("error", local_on_error); - reject_promises(ws, new Error("WebSocket aborted")); ws_wasm_abort(ws); };