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