Bug 1382380 - ensure mListener/mListenerContext/mCompressListener is released on main thread. r=dragana
During abnormal shutdown, HttpChannelChild might be released on STS thread. However, not all stream listener that attached to the HTTP channel is thread-safe to be released on non-main thread. By following HttpBaseChannel::ReleaseListener, we should ensure mListener/mListenerContext/mCompressListener is released on main thread for both normal channel close and abnormal shutdown scenario. MozReview-Commit-ID: Gqbk7dUOIcI
This commit is contained in:
@@ -257,6 +257,9 @@ HttpBaseChannel::ReleaseMainThreadOnlyReferences()
|
||||
arrayToRelease.AppendElement(mProxyURI.forget());
|
||||
arrayToRelease.AppendElement(mPrincipal.forget());
|
||||
arrayToRelease.AppendElement(mTopWindowURI.forget());
|
||||
arrayToRelease.AppendElement(mListener.forget());
|
||||
arrayToRelease.AppendElement(mListenerContext.forget());
|
||||
arrayToRelease.AppendElement(mCompressListener.forget());
|
||||
|
||||
NS_DispatchToMainThread(new ProxyReleaseRunnable(Move(arrayToRelease)));
|
||||
}
|
||||
|
||||
@@ -454,6 +454,10 @@ protected:
|
||||
nsCOMPtr<nsIURI> mProxyURI;
|
||||
nsCOMPtr<nsIPrincipal> mPrincipal;
|
||||
nsCOMPtr<nsIURI> mTopWindowURI;
|
||||
nsCOMPtr<nsIStreamListener> mListener;
|
||||
nsCOMPtr<nsISupports> mListenerContext;
|
||||
// An instance of nsHTTPCompressConv
|
||||
nsCOMPtr<nsIStreamListener> mCompressListener;
|
||||
|
||||
private:
|
||||
// Proxy release all members above on main thread.
|
||||
@@ -466,13 +470,8 @@ protected:
|
||||
|
||||
nsTArray<Pair<nsString, nsString>> mSecurityConsoleMessages;
|
||||
|
||||
nsCOMPtr<nsIStreamListener> mListener;
|
||||
nsCOMPtr<nsISupports> mListenerContext;
|
||||
nsCOMPtr<nsISupports> mOwner;
|
||||
|
||||
// An instance of nsHTTPCompressConv
|
||||
nsCOMPtr<nsIStreamListener> mCompressListener;
|
||||
|
||||
nsHttpRequestHead mRequestHead;
|
||||
// Upload throttling.
|
||||
nsCOMPtr<nsIInputChannelThrottleQueue> mThrottleQueue;
|
||||
|
||||
Reference in New Issue
Block a user