
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); } -- To stop receiving notification emails like this one, please contact the administrator of this repository.