void VideoDecoderManagerChild::RunWhenRecreated(already_AddRefed<Runnable> aTask) { MOZ_ASSERT(NS_GetCurrentThread() == GetManagerThread()); // If we've already been recreated, then run the task immediately. if (sDecoderManager && sDecoderManager != this && sDecoderManager->CanSend()) { RefPtr<Runnable> task = aTask; task->Run(); } else { sRecreateTasks->AppendElement(aTask); } }
/* static */ void VideoDecoderManagerChild::Shutdown() { MOZ_ASSERT(NS_IsMainThread()); if (sVideoDecoderChildThread) { sVideoDecoderChildThread->Dispatch(NS_NewRunnableFunction([]() { if (sDecoderManager && sDecoderManager->CanSend()) { sDecoderManager->Close(); sDecoderManager = nullptr; } }), NS_DISPATCH_NORMAL); sVideoDecoderChildAbstractThread = nullptr; sVideoDecoderChildThread->Shutdown(); sVideoDecoderChildThread = nullptr; sRecreateTasks = nullptr; } }