[dom] Better handling of aborted websocket workers.

Catch the case where we are in worker-shutdown but are still connecting
and make filing and closing connections a bit more robust with a RefPtr.
This commit is contained in:
Moonchild 2023-12-20 21:41:00 +01:00 committed by roytam1
commit bcbe73119f

View file

@ -2548,16 +2548,22 @@ WebSocket::Close(const Optional<uint16_t>& aCode,
return;
}
// If the webSocket is not closed we MUST have a mImpl.
MOZ_ASSERT(mImpl);
// If we don't have mImpl, we are in a shutting down worker where we are still
// in CONNECTING state, but already disconnected internally.
if (!mImpl) {
MOZ_ASSERT(readyState == CONNECTING);
SetReadyState(CLOSING);
return;
}
RefPtr<WebSocketImpl> impl = mImpl;
if (readyState == CONNECTING) {
mImpl->FailConnection(closeCode, closeReason);
impl->FailConnection(closeCode, closeReason);
return;
}
MOZ_ASSERT(readyState == OPEN);
mImpl->CloseConnection(closeCode, closeReason);
impl->CloseConnection(closeCode, closeReason);
}
//-----------------------------------------------------------------------------