// Note: Keep this sync'd up with Shutdown void GMPVideoDecoderParent::ActorDestroy(ActorDestroyReason aWhy) { LOGD(("GMPVideoDecoderParent[%p]::ActorDestroy reason=%d", this, aWhy)); mIsOpen = false; mActorDestroyed = true; // Ensure if we've received a destroy while waiting for a ResetComplete // or DrainComplete notification, we'll unblock the caller before processing // the error. UnblockResetAndDrain(); if (mCallback) { // May call Close() (and Shutdown()) immediately or with a delay mCallback->Terminated(); mCallback = nullptr; } if (mPlugin) { // Ignore any return code. It is OK for this to fail without killing the process. mPlugin->VideoDecoderDestroyed(this); mPlugin = nullptr; } mVideoHost.ActorDestroyed(); MaybeDisconnect(aWhy == AbnormalShutdown); }
// Note: Keep this sync'd up with Shutdown void GMPVideoEncoderParent::ActorDestroy(ActorDestroyReason aWhy) { LOGD(("%s::%s: %p (%d)", __CLASS__, __FUNCTION__, this, (int) aWhy)); mIsOpen = false; mActorDestroyed = true; if (mCallback) { // May call Close() (and Shutdown()) immediately or with a delay mCallback->Terminated(); mCallback = nullptr; } // Must be shut down before VideoEncoderDestroyed(), since this can recurse // the GMPThread event loop. See bug 1049501 if (mEncodedThread) { // Can't get it to allow me to use WrapRunnable with a nsCOMPtr<nsIThread>() NS_DispatchToMainThread( WrapRunnableNM<decltype(&ShutdownEncodedThread), nsCOMPtr<nsIThread> >(&ShutdownEncodedThread, mEncodedThread)); mEncodedThread = nullptr; } if (mPlugin) { // Ignore any return code. It is OK for this to fail without killing the process. mPlugin->VideoEncoderDestroyed(this); mPlugin = nullptr; } mVideoHost.ActorDestroyed(); // same as DoneWithAPI MaybeDisconnect(aWhy == AbnormalShutdown); }
// Note: Keep this sync'd up with Shutdown void GMPDecryptorParent::ActorDestroy(ActorDestroyReason aWhy) { LOGD(("GMPDecryptorParent[%p]::ActorDestroy(reason=%d)", this, aWhy)); mIsOpen = false; mActorDestroyed = true; if (mCallback) { // May call Close() (and Shutdown()) immediately or with a delay mCallback->Terminated(); mCallback = nullptr; } if (mPlugin) { mPlugin->DecryptorDestroyed(this); mPlugin = nullptr; } MaybeDisconnect(aWhy == AbnormalShutdown); }