Closed Bug 1169497 Opened 9 years ago Closed 5 years ago

[EME] Diagnostic assert when disabling EME while playing EME content

Categories

(Core :: Audio/Video: Playback, defect, P3)

defect

Tracking

()

RESOLVED INVALID

People

(Reporter: cpearce, Assigned: cpearce)

References

(Blocks 1 open bug)

Details

I was playing the mse-access demo and I disabled EME from options and I got a fatal assertion.


GMP thread:

SharedDecoderCallback::AssertHaveActiveProxy() Line 65	C++
SharedDecoderCallback::Error() Line 30	C++
MediaDataDecoderCallbackProxy::Error() Line 16	C++
VideoCallbackAdapter::Terminated() Line 104	C++
gmp::GMPVideoDecoderParent::Shutdown() Line 213	C++
gmp::GMPVideoDecoderParent::RecvShutdown() Line 346	C++
gmp::PGMPVideoDecoderParent::OnMessageReceived(const IPC::Message & msg__) Line 469	C++
gmp::PGMPContentParent::OnMessageReceived(const IPC::Message & msg__) Line 568	C++

Decode task queue:

ReentrantMonitor::Wait(unsigned int aInterval) Line 471	C++
ReentrantMonitorAutoEnter::Wait(unsigned int aInterval) Line 191	C++
nsEventQueue::GetEvent(bool aMayWait, nsIRunnable * * aResult) Line 66	C++
nsThread::nsChainedEventQueue::GetEvent(bool aMayWait, nsIRunnable * * aEvent) Line 117	C++
nsThread::ProcessNextEvent(bool aMayWait, bool * aResult) Line 835	C++
NS_ProcessNextEvent(nsIThread * aThread, bool aMayWait) Line 265	C++
nsThread::DispatchInternal(nsIRunnable * aEvent, unsigned int aFlags, nsThread::nsNestedEventTarget * aTarget) Line 566	C++
nsThread::Dispatch(nsIRunnable * aEvent, unsigned int aFlags) Line 584	C++
MediaDataDecoderProxy::Shutdown() Line 90	C++
EMEMediaDataDecoderProxy::Shutdown() Line 167	C++
H264Converter::Shutdown() Line 104	C++
SharedDecoderManager::Shutdown() Line 206	C++
MediaSourceReader::ContinueShutdown() Line 517	C++
MediaPromise<bool,bool,0>::InvokeCallbackMethod<mozilla::MediaSourceReader,bool>(mozilla::MediaSourceReader * aThisVal, void (void) * aMethod, bool aValue) Line 249	C++
MediaPromise<bool,bool,0>::MethodThenValue<mozilla::MediaSourceReader,void (__thiscall mozilla::MediaSourceReader::*)(void),void (__thiscall mozilla::MediaSourceReader::*)(void)>::DoResolveOrRejectInternal(mozilla::MediaPromise<bool,bool,0>::ResolveOrRejectValue & aValue) Line 277	C++
MediaPromise<bool,bool,0>::ThenValueBase::DoResolveOrReject(mozilla::MediaPromise<bool,bool,0>::ResolveOrRejectValue & aValue) Line 219	C++
MediaPromise<bool,bool,0>::ThenValueBase::ResolveOrRejectRunnable::Run() Line 170	C++
MediaTaskQueue::Runner::Run() Line 258	C++
Problem is that we handle the CDM crash in two places; in the MediaKeys and in the GMPVideoDecoder. They're racing to see who can shutdown the SDM first. If the MediaKeys gets in first, it'll cause the SDM to shutdown, and when the GMPVideodEcoder's MediaDecoderCallbackProxy tries to call the SDM::Error() callback, we'll hit this assert.
Seems I have to have it paused and in a background tab and then have the video go dormant to repro the assertion. This causes SDM::SetIdle() to be called, which clears the active proxy.
One more reason to get rid of SharedDecoderManager.
Component: Audio/Video → Audio/Video: Playback
Mass change P2 -> P3
Priority: P2 → P3

We no longer have this code path.

Status: NEW → RESOLVED
Closed: 5 years ago
Resolution: --- → INVALID
You need to log in before you can comment on or make changes to this bug.