From 09507c3bc6b9ab09fd5e420766e674951d1522cc Mon Sep 17 00:00:00 2001 From: Iris Hsiao Date: Fri, 19 May 2017 15:59:55 +0800 Subject: [PATCH] Backed out 3 changesets (bug 1366011, bug 1359357) for mochitest failures in test_ipcBlob_workers.html Backed out changeset a20220d687d4 (bug 1359357) Backed out changeset 9f71fb3f4d1e (bug 1359357) Backed out changeset 70e5477cdda0 (bug 1366011) --- dom/file/ipc/IPCBlobInputStream.cpp | 4 - dom/file/ipc/IPCBlobInputStreamChild.cpp | 87 +++----------------- dom/file/ipc/IPCBlobInputStreamChild.h | 10 --- dom/file/ipc/IPCBlobInputStreamParent.cpp | 12 --- dom/file/ipc/IPCBlobInputStreamParent.h | 3 - dom/file/ipc/PIPCBlobInputStream.ipdl | 4 +- dom/file/ipc/tests/mochitest.ini | 1 - dom/file/ipc/tests/test_ipcBlob_workers.html | 45 ---------- 8 files changed, 14 insertions(+), 152 deletions(-) delete mode 100644 dom/file/ipc/tests/test_ipcBlob_workers.html diff --git a/dom/file/ipc/IPCBlobInputStream.cpp b/dom/file/ipc/IPCBlobInputStream.cpp index ba0dfdeb74dd..71ac79cf09c7 100644 --- a/dom/file/ipc/IPCBlobInputStream.cpp +++ b/dom/file/ipc/IPCBlobInputStream.cpp @@ -192,10 +192,6 @@ IPCBlobInputStream::Clone(nsIInputStream** aResult) MOZ_ASSERT(mActor); nsCOMPtr stream = mActor->CreateStream(); - if (!stream) { - return NS_ERROR_FAILURE; - } - stream.forget(aResult); return NS_OK; } diff --git a/dom/file/ipc/IPCBlobInputStreamChild.cpp b/dom/file/ipc/IPCBlobInputStreamChild.cpp index 4e8379069261..fda381365bb3 100644 --- a/dom/file/ipc/IPCBlobInputStreamChild.cpp +++ b/dom/file/ipc/IPCBlobInputStreamChild.cpp @@ -5,7 +5,6 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "IPCBlobInputStreamChild.h" -#include "WorkerHolder.h" namespace mozilla { namespace dom { @@ -14,17 +13,19 @@ namespace { // This runnable is used in case the last stream is forgotten on the 'wrong' // thread. -class ShutdownRunnable final : public CancelableRunnable +class DeleteRunnable final : public Runnable { public: - explicit ShutdownRunnable(IPCBlobInputStreamChild* aActor) + explicit DeleteRunnable(IPCBlobInputStreamChild* aActor) : mActor(aActor) {} NS_IMETHOD Run() override { - mActor->Shutdown(); + if (mActor->IsAlive()) { + mActor->Send__delete__(mActor); + } return NS_OK; } @@ -34,7 +35,7 @@ private: // This runnable is used in case StreamNeeded() has been called on a non-owning // thread. -class StreamNeededRunnable final : public CancelableRunnable +class StreamNeededRunnable final : public Runnable { public: explicit StreamNeededRunnable(IPCBlobInputStreamChild* aActor) @@ -80,26 +81,6 @@ private: nsCOMPtr mCreatedStream; }; -class IPCBlobInputStreamWorkerHolder final : public WorkerHolder -{ -public: - explicit IPCBlobInputStreamWorkerHolder(IPCBlobInputStreamChild* aActor) - : mActor(aActor) - {} - - bool Notify(Status aStatus) override - { - if (aStatus > Running) { - mActor->Shutdown(); - // After this the WorkerHolder is gone. - } - return true; - } - -private: - RefPtr mActor; -}; - } // anonymous IPCBlobInputStreamChild::IPCBlobInputStreamChild(const nsID& aID, @@ -109,50 +90,16 @@ IPCBlobInputStreamChild::IPCBlobInputStreamChild(const nsID& aID, , mSize(aSize) , mActorAlive(true) , mOwningThread(NS_GetCurrentThread()) -{ - // If we are running in a worker, we need to send a Close() to the parent side - // before the thread is released. - if (!NS_IsMainThread()) { - WorkerPrivate* workerPrivate = GetCurrentThreadWorkerPrivate(); - if (workerPrivate) { - UniquePtr workerHolder( - new IPCBlobInputStreamWorkerHolder(this)); - if (workerHolder->HoldWorker(workerPrivate, Canceling)) { - mWorkerHolder.swap(workerHolder); - } - } - } -} +{} IPCBlobInputStreamChild::~IPCBlobInputStreamChild() {} -void -IPCBlobInputStreamChild::Shutdown() -{ - MutexAutoLock lock(mMutex); - - RefPtr kungFuDeathGrip = this; - - mWorkerHolder = nullptr; - mPendingOperations.Clear(); - - if (mActorAlive) { - SendClose(); - mActorAlive = false; - } -} - void IPCBlobInputStreamChild::ActorDestroy(IProtocol::ActorDestroyReason aReason) { - { - MutexAutoLock lock(mMutex); - mActorAlive = false; - } - - // Let's cleanup the workerHolder and the pending operation queue. - Shutdown(); + MutexAutoLock lock(mMutex); + mActorAlive = false; } bool @@ -167,10 +114,6 @@ IPCBlobInputStreamChild::CreateStream() { MutexAutoLock lock(mMutex); - if (!mActorAlive) { - return nullptr; - } - RefPtr stream = new IPCBlobInputStream(this); mStreams.AppendElement(stream); return stream.forget(); @@ -181,7 +124,7 @@ IPCBlobInputStreamChild::ForgetStream(IPCBlobInputStream* aStream) { MOZ_ASSERT(aStream); - RefPtr kungFuDeathGrip = this; + RefPtr kungFoDeathGrip = this; { MutexAutoLock lock(mMutex); @@ -193,11 +136,11 @@ IPCBlobInputStreamChild::ForgetStream(IPCBlobInputStream* aStream) } if (mOwningThread == NS_GetCurrentThread()) { - Shutdown(); + Send__delete__(this); return; } - RefPtr runnable = new ShutdownRunnable(this); + RefPtr runnable = new DeleteRunnable(this); mOwningThread->Dispatch(runnable, NS_DISPATCH_NORMAL); } @@ -206,11 +149,6 @@ IPCBlobInputStreamChild::StreamNeeded(IPCBlobInputStream* aStream, nsIEventTarget* aEventTarget) { MutexAutoLock lock(mMutex); - - if (!mActorAlive) { - return; - } - MOZ_ASSERT(mStreams.Contains(aStream)); PendingOperation* opt = mPendingOperations.AppendElement(); @@ -237,7 +175,6 @@ IPCBlobInputStreamChild::RecvStreamReady(const OptionalIPCStream& aStream) { MutexAutoLock lock(mMutex); MOZ_ASSERT(!mPendingOperations.IsEmpty()); - MOZ_ASSERT(mActorAlive); pendingStream = mPendingOperations[0].mStream; eventTarget = mPendingOperations[0].mEventTarget; diff --git a/dom/file/ipc/IPCBlobInputStreamChild.h b/dom/file/ipc/IPCBlobInputStreamChild.h index 2860915ce488..56fc77a28eff 100644 --- a/dom/file/ipc/IPCBlobInputStreamChild.h +++ b/dom/file/ipc/IPCBlobInputStreamChild.h @@ -9,17 +9,12 @@ #include "mozilla/ipc/PIPCBlobInputStreamChild.h" #include "mozilla/Mutex.h" -#include "mozilla/UniquePtr.h" #include "nsIThread.h" #include "nsTArray.h" namespace mozilla { namespace dom { -namespace workers { -class WorkerHolder; -} - class IPCBlobInputStream; class IPCBlobInputStreamChild final @@ -61,9 +56,6 @@ public: mozilla::ipc::IPCResult RecvStreamReady(const OptionalIPCStream& aStream) override; - void - Shutdown(); - private: ~IPCBlobInputStreamChild(); @@ -90,8 +82,6 @@ private: nsTArray mPendingOperations; nsCOMPtr mOwningThread; - - UniquePtr mWorkerHolder; }; } // namespace dom diff --git a/dom/file/ipc/IPCBlobInputStreamParent.cpp b/dom/file/ipc/IPCBlobInputStreamParent.cpp index 99f609cba92f..5415d0259b1e 100644 --- a/dom/file/ipc/IPCBlobInputStreamParent.cpp +++ b/dom/file/ipc/IPCBlobInputStreamParent.cpp @@ -96,17 +96,5 @@ IPCBlobInputStreamParent::RecvStreamNeeded() return IPC_OK(); } -mozilla::ipc::IPCResult -IPCBlobInputStreamParent::RecvClose() -{ - MOZ_ASSERT(mContentManager || mPBackgroundManager); - - if (!Send__delete__(this)) { - return IPC_FAIL(this, "Send__delete_ failed"); - } - - return IPC_OK(); -} - } // namespace dom } // namespace mozilla diff --git a/dom/file/ipc/IPCBlobInputStreamParent.h b/dom/file/ipc/IPCBlobInputStreamParent.h index 3ab06aed7013..f1cd9dbc75a6 100644 --- a/dom/file/ipc/IPCBlobInputStreamParent.h +++ b/dom/file/ipc/IPCBlobInputStreamParent.h @@ -44,9 +44,6 @@ public: mozilla::ipc::IPCResult RecvStreamNeeded() override; - mozilla::ipc::IPCResult - RecvClose() override; - private: IPCBlobInputStreamParent(const nsID& aID, uint64_t aSize, nsIContentParent* aManager); diff --git a/dom/file/ipc/PIPCBlobInputStream.ipdl b/dom/file/ipc/PIPCBlobInputStream.ipdl index 35ec2345771a..7fa48f2f6e81 100644 --- a/dom/file/ipc/PIPCBlobInputStream.ipdl +++ b/dom/file/ipc/PIPCBlobInputStream.ipdl @@ -20,11 +20,11 @@ protocol PIPCBlobInputStream parent: async StreamNeeded(); - async Close(); + + async __delete__(); child: async StreamReady(OptionalIPCStream aStream); - async __delete__(); }; } // namespace dom diff --git a/dom/file/ipc/tests/mochitest.ini b/dom/file/ipc/tests/mochitest.ini index 071d37a3403f..54df5623882e 100644 --- a/dom/file/ipc/tests/mochitest.ini +++ b/dom/file/ipc/tests/mochitest.ini @@ -3,4 +3,3 @@ support-files = script_file.js [test_ipcBlob_fileReaderSync.html] -[test_ipcBlob_workers.html] diff --git a/dom/file/ipc/tests/test_ipcBlob_workers.html b/dom/file/ipc/tests/test_ipcBlob_workers.html deleted file mode 100644 index 6086cbf42674..000000000000 --- a/dom/file/ipc/tests/test_ipcBlob_workers.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - Test IPCBlob and Workers - - - - - - - - -