This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch tor-browser-91.8.0esr-11.0-1 in repository tor-browser.
commit 612808528c94bfbcd9bce56b0ed56f55c9b43693 Author: Luca Greco lgreco@mozilla.com AuthorDate: Wed Oct 27 16:36:34 2021 +0000
Bug 1735899 - Make sure RemoteLazyInputStream::Close calls mInputStreamCallback OnInputStreamReady method. r=nika, a=RyanVM
RemoteLazyInputStream::Close was not setting mInputStreamCallback to a nullptr without using it in the InputStreamCallbackRunnable::Execute, which would be calling OnInputStreamReady on the mInputStreamCallback.
This does also match the details we gathered while investigating the bug (which was triggered exactly by a remote lazy stream getter that did never got to call OnInputStreamReady by the time we were closing the channel).
Differential Revision: https://phabricator.services.mozilla.com/D129374 --- dom/file/ipc/RemoteLazyInputStream.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/dom/file/ipc/RemoteLazyInputStream.cpp b/dom/file/ipc/RemoteLazyInputStream.cpp index 10e2e41633ad7..d49cee228e457 100644 --- a/dom/file/ipc/RemoteLazyInputStream.cpp +++ b/dom/file/ipc/RemoteLazyInputStream.cpp @@ -281,6 +281,10 @@ NS_IMETHODIMP RemoteLazyInputStream::Close() { nsCOMPtr<nsIAsyncInputStream> asyncRemoteStream; nsCOMPtr<nsIInputStream> remoteStream; + + nsCOMPtr<nsIInputStreamCallback> inputStreamCallback; + nsCOMPtr<nsIEventTarget> inputStreamCallbackEventTarget; + { MutexAutoLock lock(mMutex);
@@ -292,15 +296,22 @@ RemoteLazyInputStream::Close() { asyncRemoteStream.swap(mAsyncRemoteStream); remoteStream.swap(mRemoteStream);
- mInputStreamCallback = nullptr; - mInputStreamCallbackEventTarget = nullptr; - + // TODO(Bug 1737783): Notify to the mFileMetadataCallback that this + // lazy input stream has been closed. mFileMetadataCallback = nullptr; mFileMetadataCallbackEventTarget = nullptr;
+ inputStreamCallback = std::move(mInputStreamCallback); + inputStreamCallbackEventTarget = std::move(mInputStreamCallbackEventTarget); + mState = eClosed; }
+ if (inputStreamCallback) { + InputStreamCallbackRunnable::Execute(inputStreamCallback, + inputStreamCallbackEventTarget, this); + } + if (asyncRemoteStream) { asyncRemoteStream->CloseWithStatus(NS_BASE_STREAM_CLOSED); }