Bug 1306529 - OmxDataDecoder: Fix a stall issue on shutting down r?jya
Because the shutdown closure awaits finishing itself by
TaskQueue::AwaitShutdownAndIdle(), the function blocks infinitely.
The code is wrongly introduced at the following commit:
* https://bugzilla.mozilla.org/show_bug.cgi?id=1319987
* https://hg.mozilla.org/mozilla-central/rev/b2171e3e8b69
This patch calls it on mTaskQueue intead of mOmxTaskQueue to
avoid the issue.
MozReview-Commit-ID: 4qmX2QlniEG
--- a/dom/media/platforms/omx/OmxDataDecoder.cpp
+++ b/dom/media/platforms/omx/OmxDataDecoder.cpp
@@ -268,35 +268,39 @@ OmxDataDecoder::DoAsyncShutdown()
return p;
},
[self] (const OmxCommandFailureHolder& aError) {
self->mOmxLayer->Shutdown();
return OmxCommandPromise::CreateAndReject(aError, __func__);
})
->Then(mOmxTaskQueue, __func__,
- [self] () {
+ [self] () -> RefPtr<ShutdownPromise> {
LOGL("DoAsyncShutdown: OMX_StateLoaded, it is safe to shutdown omx");
self->mOmxLayer->Shutdown();
self->mWatchManager.Shutdown();
self->mOmxLayer = nullptr;
self->mMediaDataHelper = nullptr;
-
self->mShuttingDown = false;
+ return ShutdownPromise::CreateAndResolve(true, __func__);
+ },
+ [self] () -> RefPtr<ShutdownPromise> {
+ self->mOmxLayer->Shutdown();
+ self->mWatchManager.Shutdown();
+ self->mOmxLayer = nullptr;
+ self->mMediaDataHelper = nullptr;
+ return ShutdownPromise::CreateAndReject(false, __func__);
+ })
+ ->Then(mTaskQueue, __func__,
+ [self] () {
self->mOmxTaskQueue->BeginShutdown();
self->mOmxTaskQueue->AwaitShutdownAndIdle();
self->mShutdownPromise.Resolve(true, __func__);
},
[self] () {
- self->mOmxLayer->Shutdown();
- self->mWatchManager.Shutdown();
- self->mOmxLayer = nullptr;
- self->mMediaDataHelper = nullptr;
-
- self->mShuttingDown = false;
self->mOmxTaskQueue->BeginShutdown();
self->mOmxTaskQueue->AwaitShutdownAndIdle();
self->mShutdownPromise.Resolve(true, __func__);
});
return mShutdownPromise.Ensure(__func__);
}
void