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'); +}