From f53281dca96a798a22c3f3c10c4d510053160806 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 --- src/node_messaging.cc | 2 +- test/parallel/test-worker-message-port-close.js | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/node_messaging.cc b/src/node_messaging.cc index aac1245f269a87..6403950e9c8a96 100644 --- a/src/node_messaging.cc +++ b/src/node_messaging.cc @@ -980,7 +980,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..a2afb0e0d9942a 100644 --- a/test/parallel/test-worker-message-port-close.js +++ b/test/parallel/test-worker-message-port-close.js @@ -39,3 +39,10 @@ function dummy() {} message: 'Cannot send data on closed MessagePort' }); } + +{ + const ch = new MessageChannel() + ch.port1.onmessage = common.mustNotCall(); + ch.port2.close(); + ch.port2.postMessage('fhqwhgads'); +}