[tbb-commits] [tor-browser] 03/14: Bug 1791314, some underlying streams prefer being closed on the target thread, r=valentin, necko-reviewers, a=dmeehan
gitolite role
git at cupani.torproject.org
Thu Nov 17 14:03:42 UTC 2022
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch tor-browser-91.13.0esr-11.5-1
in repository tor-browser.
commit 40b1a378f8245a72e003016b81f35de721b11351
Author: Olli Pettay <Olli.Pettay at helsinki.fi>
AuthorDate: Thu Oct 27 08:40:35 2022 +0000
Bug 1791314, some underlying streams prefer being closed on the target thread, r=valentin,necko-reviewers, a=dmeehan
Differential Revision: https://phabricator.services.mozilla.com/D160054
---
netwerk/base/nsInputStreamPump.cpp | 25 ++++++++++++++++++++++---
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/netwerk/base/nsInputStreamPump.cpp b/netwerk/base/nsInputStreamPump.cpp
index d6d4ac33eb3d..9cf546e51099 100644
--- a/netwerk/base/nsInputStreamPump.cpp
+++ b/netwerk/base/nsInputStreamPump.cpp
@@ -191,12 +191,31 @@ nsInputStreamPump::Cancel(nsresult status) {
// close input stream
if (mAsyncStream) {
- mAsyncStream->CloseWithStatus(status);
- if (mSuspendCount == 0) EnsureWaiting();
- // Otherwise, EnsureWaiting will be called by Resume().
+ // If mSuspendCount != 0, EnsureWaiting will be called by Resume().
// Note that while suspended, OnInputStreamReady will
// not do anything, and also note that calling asyncWait
// on a closed stream works and will dispatch an event immediately.
+
+ nsCOMPtr<nsIEventTarget> currentTarget = NS_GetCurrentThread();
+ if (mTargetThread && currentTarget != mTargetThread) {
+ nsresult rv = mTargetThread->Dispatch(NS_NewRunnableFunction(
+ "nsInputStreamPump::Cancel", [self = RefPtr{this}, status] {
+ RecursiveMutexAutoLock lock(self->mMutex);
+ if (!self->mAsyncStream) {
+ return;
+ }
+ self->mAsyncStream->CloseWithStatus(status);
+ if (self->mSuspendCount == 0) {
+ self->EnsureWaiting();
+ }
+ }));
+ NS_ENSURE_SUCCESS(rv, rv);
+ } else {
+ mAsyncStream->CloseWithStatus(status);
+ if (mSuspendCount == 0) {
+ EnsureWaiting();
+ }
+ }
}
return NS_OK;
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the tbb-commits
mailing list