From c9df30883530e5a3c94918d2fa300fb201dc8565 Mon Sep 17 00:00:00 2001 From: Alistair Smith Date: Wed, 28 May 2025 11:30:46 -0700 Subject: [PATCH] pass identifier not ptr --- src/bun.js/bindings/webcore/MessagePort.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/bun.js/bindings/webcore/MessagePort.cpp b/src/bun.js/bindings/webcore/MessagePort.cpp index 1cfb6c65a9..fc837005fa 100644 --- a/src/bun.js/bindings/webcore/MessagePort.cpp +++ b/src/bun.js/bindings/webcore/MessagePort.cpp @@ -87,16 +87,19 @@ bool MessagePort::isMessagePortAliveForTesting(const MessagePortIdentifier& iden void MessagePort::notifyMessageAvailable(const MessagePortIdentifier& identifier) { std::optional scriptExecutionContextIdentifier; - ThreadSafeWeakPtr weakPort; { Locker locker { allMessagePortsLock }; scriptExecutionContextIdentifier = portToContextIdentifier().getOptional(identifier); - weakPort = allMessagePorts().get(identifier); } if (!scriptExecutionContextIdentifier) return; - ScriptExecutionContext::ensureOnContextThread(*scriptExecutionContextIdentifier, [weakPort = WTFMove(weakPort)](auto&) { + ScriptExecutionContext::ensureOnContextThread(*scriptExecutionContextIdentifier, [identifier](auto&) { + ThreadSafeWeakPtr weakPort; + { + Locker locker { allMessagePortsLock }; + weakPort = allMessagePorts().get(identifier); + } if (RefPtr port = weakPort.get()) port->messageAvailable(); }); @@ -105,16 +108,19 @@ void MessagePort::notifyMessageAvailable(const MessagePortIdentifier& identifier void MessagePort::notifyPortClosed(const MessagePortIdentifier& identifier) { std::optional scriptExecutionContextIdentifier; - ThreadSafeWeakPtr weakPort; { Locker locker { allMessagePortsLock }; scriptExecutionContextIdentifier = portToContextIdentifier().getOptional(identifier); - weakPort = allMessagePorts().get(identifier); } if (!scriptExecutionContextIdentifier) return; - ScriptExecutionContext::ensureOnContextThread(*scriptExecutionContextIdentifier, [weakPort = WTFMove(weakPort)](auto&) { + ScriptExecutionContext::ensureOnContextThread(*scriptExecutionContextIdentifier, [identifier](auto&) { + ThreadSafeWeakPtr weakPort; + { + Locker locker { allMessagePortsLock }; + weakPort = allMessagePorts().get(identifier); + } if (RefPtr port = weakPort.get()) { // Only dispatch close event if the port has message event listeners if (port->m_hasMessageEventListener) {