Bug 1415564 - TaskQueue::Dispatch should return an error if failed, r=smaug

This commit is contained in:
Andrea Marchesini 2017-11-09 01:43:40 +01:00
parent ea4f1b44ae
commit 3f760d8258
4 changed files with 16 additions and 16 deletions

View File

@ -36,11 +36,11 @@ public:
return mTaskQueue->TailDispatcher();
}
void Dispatch(already_AddRefed<nsIRunnable> aRunnable,
DispatchFailureHandling aFailureHandling = AssertDispatchSuccess,
DispatchReason aReason = NormalDispatch) override
nsresult Dispatch(already_AddRefed<nsIRunnable> aRunnable,
DispatchFailureHandling aFailureHandling = AssertDispatchSuccess,
DispatchReason aReason = NormalDispatch) override
{
mTaskQueue->Dispatch(Move(aRunnable), aFailureHandling, aReason);
return mTaskQueue->Dispatch(Move(aRunnable), aFailureHandling, aReason);
}
// Prevent a GCC warning about the other overload of Dispatch being hidden.

View File

@ -46,20 +46,20 @@ public:
MOZ_ASSERT_IF(aRequireTailDispatch, NS_IsMainThread() && aTarget->IsOnCurrentThread());
}
virtual void Dispatch(already_AddRefed<nsIRunnable> aRunnable,
DispatchFailureHandling aFailureHandling = AssertDispatchSuccess,
DispatchReason aReason = NormalDispatch) override
virtual nsresult Dispatch(already_AddRefed<nsIRunnable> aRunnable,
DispatchFailureHandling aFailureHandling = AssertDispatchSuccess,
DispatchReason aReason = NormalDispatch) override
{
AbstractThread* currentThread;
if (aReason != TailDispatch && (currentThread = GetCurrent()) && RequiresTailDispatch(currentThread)) {
currentThread->TailDispatcher().AddTask(this, Move(aRunnable), aFailureHandling);
return;
return NS_OK;
}
RefPtr<nsIRunnable> runner(new Runner(this, Move(aRunnable), false /* already drained by TaskGroupRunnable */));
nsresult rv = mTarget->Dispatch(runner.forget(), NS_DISPATCH_NORMAL);
MOZ_DIAGNOSTIC_ASSERT(aFailureHandling == DontAssertDispatchSuccess || NS_SUCCEEDED(rv));
Unused << rv;
return rv;
}
// Prevent a GCC warning about the other overload of Dispatch being hidden.

View File

@ -69,9 +69,9 @@ public:
enum DispatchFailureHandling { AssertDispatchSuccess, DontAssertDispatchSuccess };
enum DispatchReason { NormalDispatch, TailDispatch };
virtual void Dispatch(already_AddRefed<nsIRunnable> aRunnable,
DispatchFailureHandling aHandling = AssertDispatchSuccess,
DispatchReason aReason = NormalDispatch) = 0;
virtual nsresult Dispatch(already_AddRefed<nsIRunnable> aRunnable,
DispatchFailureHandling aHandling = AssertDispatchSuccess,
DispatchReason aReason = NormalDispatch) = 0;
virtual bool IsCurrentThreadIn() = 0;

View File

@ -61,9 +61,9 @@ public:
TaskQueue* AsTaskQueue() override { return this; }
void Dispatch(already_AddRefed<nsIRunnable> aRunnable,
DispatchFailureHandling aFailureHandling = AssertDispatchSuccess,
DispatchReason aReason = NormalDispatch) override
nsresult Dispatch(already_AddRefed<nsIRunnable> aRunnable,
DispatchFailureHandling aFailureHandling = AssertDispatchSuccess,
DispatchReason aReason = NormalDispatch) override
{
nsCOMPtr<nsIRunnable> r = aRunnable;
{
@ -74,7 +74,7 @@ public:
MOZ_CRASH_UNSAFE_PRINTF("%s: Dispatch failed. rv=%x", mName, uint32_t(rv));
}
#endif
Unused << rv;
return rv;
}
// If the ownership of |r| is not transferred in DispatchLocked() due to
// dispatch failure, it will be deleted here outside the lock. We do so