mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-23 12:51:06 +00:00
Bug 1907726 - Make sure WebTransportSessionProxy::NotifyDatagramReceived is called after OnStopRequest, r=necko-reviewers,jesup
The crash occurs because WebTransportSessionProxy::OnDatagramReceivedInternal is called before WebTransportSessionProxy::OnStopRequest. When this happens, WebTransportSessionProxy::mTarget is the main thread, so a task is dispatched to the main thread. This causes WebTransportSessionProxy::NotifyDatagramReceived to be called on the main thread. If WebTransportSessionProxy::NotifyDatagramReceived is invoked while WebTransportSessionProxy::mStopRequestCalled is true, it can lead to OnDatagramReceived being called on the main thread (instead of the socket thread), resulting in a crash. Differential Revision: https://phabricator.services.mozilla.com/D220013
This commit is contained in:
parent
042cf5fb44
commit
f994878fcd
@ -1078,15 +1078,6 @@ void WebTransportSessionProxy::NotifyDatagramReceived(
|
||||
MutexAutoLock lock(mMutex);
|
||||
MOZ_ASSERT(mTarget->IsOnCurrentThread());
|
||||
|
||||
if (!mStopRequestCalled) {
|
||||
CopyableTArray<uint8_t> copied(aData);
|
||||
mPendingEvents.AppendElement(
|
||||
[self = RefPtr{this}, data = std::move(copied)]() mutable {
|
||||
self->NotifyDatagramReceived(std::move(data));
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (mState != WebTransportSessionProxyState::ACTIVE || !mListener) {
|
||||
return;
|
||||
}
|
||||
@ -1102,6 +1093,15 @@ NS_IMETHODIMP WebTransportSessionProxy::OnDatagramReceivedInternal(
|
||||
|
||||
{
|
||||
MutexAutoLock lock(mMutex);
|
||||
if (!mStopRequestCalled) {
|
||||
CopyableTArray<uint8_t> copied(aData);
|
||||
mPendingEvents.AppendElement(
|
||||
[self = RefPtr{this}, data = std::move(copied)]() mutable {
|
||||
self->OnDatagramReceivedInternal(std::move(data));
|
||||
});
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
if (!mTarget->IsOnCurrentThread()) {
|
||||
return mTarget->Dispatch(NS_NewRunnableFunction(
|
||||
"WebTransportSessionProxy::OnDatagramReceived",
|
||||
|
Loading…
Reference in New Issue
Block a user