From 1571d5bd52aa08bb15574e8f1ef0948b0b3e80f6 Mon Sep 17 00:00:00 2001 From: Ehsan Akhgari Date: Fri, 10 Apr 2015 17:09:15 -0400 Subject: [PATCH] Bug 1149987 - Part 6: Release the FetchPut object on the right thread in FetchObserver::OnResponseEnd(); r=bkelly --- dom/cache/FetchPut.cpp | 10 +++++++++- dom/cache/FetchPut.h | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/dom/cache/FetchPut.cpp b/dom/cache/FetchPut.cpp index 7517603e376..c7c698e2267 100644 --- a/dom/cache/FetchPut.cpp +++ b/dom/cache/FetchPut.cpp @@ -77,7 +77,15 @@ public: virtual void OnResponseEnd() override { mFetchPut->FetchComplete(this, mInternalResponse); - mFetchPut = nullptr; + if (mFetchPut->mInitiatingThread == NS_GetCurrentThread()) { + mFetchPut = nullptr; + } else { + nsCOMPtr initiatingThread(mFetchPut->mInitiatingThread); + nsCOMPtr runnable = + NS_NewNonOwningRunnableMethod(mFetchPut.forget().take(), &FetchPut::Release); + MOZ_ALWAYS_TRUE(NS_SUCCEEDED( + initiatingThread->Dispatch(runnable, nsIThread::DISPATCH_NORMAL))); + } } protected: diff --git a/dom/cache/FetchPut.h b/dom/cache/FetchPut.h index 1efad6f6de2..aed76aac11c 100644 --- a/dom/cache/FetchPut.h +++ b/dom/cache/FetchPut.h @@ -54,6 +54,7 @@ public: private: class Runnable; class FetchObserver; + friend class FetchObserver; struct State { PCacheRequest mPCacheRequest;