From de474c8b6ffbf0ddd5b43b579448cf5ecdf4b2b9 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Wed, 16 Mar 2022 06:16:00 +0000 Subject: [PATCH] worker: do not send message if port is closing Fixes: https://github.com/nodejs/node/issues/42296 PR-URL: https://github.com/nodejs/node/pull/42357 Reviewed-By: Anna Henningsen Reviewed-By: Antoine du Hamel Reviewed-By: Luigi Pinca Reviewed-By: Benjamin Gruenbaum --- src/node_messaging.cc | 2 +- test/parallel/test-worker-message-port-close.js | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/node_messaging.cc b/src/node_messaging.cc index b743ec72b45ee2..097696f8136a13 100644 --- a/src/node_messaging.cc +++ b/src/node_messaging.cc @@ -964,7 +964,7 @@ void MessagePort::PostMessage(const FunctionCallbackInfo& args) { // Even if the backing MessagePort object has already been deleted, we still // want to serialize the message to ensure spec-compliant behavior w.r.t. // transfers. - if (port == nullptr) { + if (port == nullptr || port->IsHandleClosing()) { Message msg; USE(msg.Serialize(env, context, args[0], transfer_list, obj)); return; diff --git a/test/parallel/test-worker-message-port-close.js b/test/parallel/test-worker-message-port-close.js index 6abc01d1b7b568..6562824d6a9ed3 100644 --- a/test/parallel/test-worker-message-port-close.js +++ b/test/parallel/test-worker-message-port-close.js @@ -39,3 +39,11 @@ function dummy() {} message: 'Cannot send data on closed MessagePort' }); } + +// Refs: https://github.com/nodejs/node/issues/42296 +{ + const ch = new MessageChannel(); + ch.port1.onmessage = common.mustNotCall(); + ch.port2.close(); + ch.port2.postMessage('fhqwhgads'); +}