[EME] crash accessing invalid SourceBuffer in test_eme_stream_capture_blocked with --e10s

RESOLVED FIXED

Status

()

Core
Audio/Video: Playback
P2
normal
RESOLVED FIXED
3 years ago
2 years ago

People

(Reporter: cpearce, Unassigned)

Tracking

(Blocks: 2 bugs)

Firefox Tracking Flags

(Not tracked)

Details

(Reporter)

Description

3 years ago
I got a tab crash on Windows 8.1 x64 mochitests with e10s enabled:

$ ./mach mochitest-plain dom/media/test/test_eme_* --e10s --run-until-failure --repeat 100000


JavaScript error: http://mochi.test:8888/tests/dom/media/test/eme.js, line 183: InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable
58657 ERROR [SimpleTest.finish()] this test already called finish!
58658 INFO TEST-UNEXPECTED-ERROR | dom/media/test/test_eme_stream_capture_blocked.html | called finish() multiple times
TEST-INFO
58659 INFO [13:26:39.808] bipbop-cenc-videoinit.mp4-1_case3 video: fetch of http://test2.mochi.test:8888/tests/dom/media/test/allowed.sjs?bipbop-cenc-video2.m4s complete, appending
JavaScript error: http://mochi.test:8888/tests/dom/media/test/eme.js, line 183: InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable
58660 ERROR [SimpleTest.finish()] this test already called finish!
58661 INFO TEST-UNEXPECTED-ERROR | dom/media/test/test_eme_stream_capture_blocked.html | called finish() multiple times
TEST-INFO
58662 INFO [13:26:39.942] bipbop-cenc-videoinit.mp4-2_case1 progress
58663 INFO [13:26:39.944] bipbop-cenc-videoinit.mp4-2_case3 progress
#01: mozilla::ipc::MessageChannel::CxxStackFrame::CxxStackFrame (c:\users\cpearce\src\mozilla\purple\ipc\glue\messagechannel.cpp:221)
#02: mozilla::ipc::MessageChannel::Send (c:\users\cpearce\src\mozilla\purple\ipc\glue\messagechannel.cpp:537)
#03: mozilla::gmp::PGMPVideoDecoderParent::SendDecodingComplete (c:\users\cpearce\src\mozilla\purple\objdir\ipc\ipdl\pgmpvideodecoderparent.cpp:156)
#04: mozilla::gmp::GMPVideoDecoderParent::Shutdown (c:\users\cpearce\src\mozilla\purple\dom\media\gmp\gmpvideodecoderparent.cpp:216)
#05: mozilla::gmp::GMPVideoDecoderParent::Close (c:\users\cpearce\src\mozilla\purple\dom\media\gmp\gmpvideodecoderparent.cpp:82)
#06: mozilla::GMPVideoDecoder::Shutdown (c:\users\cpearce\src\mozilla\purple\dom\media\fmp4\gmp\gmpvideodecoder.cpp:294)
#07: nsRunnableMethodArguments<>::apply<mozilla::MediaDataDecoder,enum nsresult (__thiscall mozilla::MediaDataDecoder::*)(void)> (c:\users\cpearce\src\mozilla\purple\objdir\dist\include\nsthreadutils.
h:575)
#08: nsRunnableMethodImpl<enum nsresult (__thiscall mozilla::MediaDataDecoder::*)(void),1>::Run (c:\users\cpearce\src\mozilla\purple\objdir\dist\include\nsthreadutils.h:668)
#09: nsThreadSyncDispatch::Run (c:\users\cpearce\src\mozilla\purple\xpcom\threads\nsthread.cpp:1130)
#10: nsThread::ProcessNextEvent (c:\users\cpearce\src\mozilla\purple\xpcom\threads\nsthread.cpp:866)
#11: NS_ProcessNextEvent (c:\users\cpearce\src\mozilla\purple\xpcom\glue\nsthreadutils.cpp:265)
#12: mozilla::ipc::MessagePumpForNonMainThreads::Run (c:\users\cpearce\src\mozilla\purple\ipc\glue\messagepump.cpp:368)
#13: MessageLoop::RunInternal (c:\users\cpearce\src\mozilla\purple\ipc\chromium\src\base\message_loop.cc:234)
#14: MessageLoop::RunHandler (c:\users\cpearce\src\mozilla\purple\ipc\chromium\src\base\message_loop.cc:227)
#15: MessageLoop::Run (c:\users\cpearce\src\mozilla\purple\ipc\chromium\src\base\message_loop.cc:201)
#16: nsThread::ThreadFunc (c:\users\cpearce\src\mozilla\purple\xpcom\threads\nsthread.cpp:366)
#17: _PR_NativeRunThread (c:\users\cpearce\src\mozilla\purple\nsprpub\pr\src\threads\combined\pruthr.c:397)
#18: pr_root (c:\users\cpearce\src\mozilla\purple\nsprpub\pr\src\md\windows\w95thred.c:90)
#19: _get_flsindex[MSVCR120 +0x2c01d]
#20: _get_flsindex[MSVCR120 +0x2c001]
#21: BaseThreadInitThunk[KERNEL32 +0x17c04]
#22: RtlInitializeExceptionChain[ntdll +0x5b54f]
#23: RtlInitializeExceptionChain[ntdll +0x5b51a]
###!!! [Parent][MessageChannel] Error: Channel error: cannot send/recv
###!!! [Child][OnMaybeDequeueOne] Error: Channel closing: too late to send/recv, messages will be lost



Fail log:

TEST-INFO | leakcheck | tab process: ignoring missing output line for total leaks
runtests.py | Running tests: end.
The following tests failed:
58664 INFO TEST-UNEXPECTED-FAIL | dom/media/test/test_eme_stream_capture_blocked.html | bipbop-cenc-videoinit.mp4-2_case2: session.generateRequest failed; InvalidStateError: An attempt was made to use
 an object that is not, or is no longer, usable - expected PASS
58665 INFO TEST-UNEXPECTED-FAIL | dom/media/test/test_eme_stream_capture_blocked.html | bipbop-cenc-videoinit.mp4-0_case2 got error event; [object Event] - expected PASS
58666 INFO TEST-UNEXPECTED-ERROR | dom/media/test/test_eme_stream_capture_blocked.html | called finish() multiple times
TEST-INFO
58667 INFO TEST-UNEXPECTED-FAIL | dom/media/test/test_eme_stream_capture_blocked.html | bipbop-cenc-videoinit.mp4-0_case3 got error event; [object Event] - expected PASS
58668 INFO TEST-UNEXPECTED-ERROR | dom/media/test/test_eme_stream_capture_blocked.html | called finish() multiple times
TEST-INFO
58669 INFO TEST-UNEXPECTED-FAIL | dom/media/test/test_eme_stream_capture_blocked.html | bipbop-cenc-videoinit.mp4-1_case2 got error event; [object Event] - expected PASS
58670 INFO TEST-UNEXPECTED-ERROR | dom/media/test/test_eme_stream_capture_blocked.html | called finish() multiple times
TEST-INFO
58671 INFO TEST-UNEXPECTED-FAIL | dom/media/test/test_eme_stream_capture_blocked.html | bipbop-cenc-videoinit.mp4-1_case3 got error event; [object Event] - expected PASS
58672 INFO TEST-UNEXPECTED-ERROR | dom/media/test/test_eme_stream_capture_blocked.html | called finish() multiple times
TEST-INFO
58673 INFO TEST-UNEXPECTED-FAIL | dom/media/test/test_eme_stream_capture_blocked.html | bipbop-cenc-videoinit.mp4-2_case2 got error event; [object Event] - expected PASS
58674 INFO TEST-UNEXPECTED-ERROR | dom/media/test/test_eme_stream_capture_blocked.html | called finish() multiple times
TEST-INFO
58675 INFO TEST-UNEXPECTED-ERROR | dom/media/test/test_eme_stream_capture_blocked.html | This test left crash dumps behind, but we weren't expecting it to!
TEST-INFO
58676 INFO TEST-UNEXPECTED-ERROR | dom/media/test/test_eme_stream_capture_blocked.html | called finish() multiple times
TEST-INFO
58677 INFO TEST-UNEXPECTED-ERROR | dom/media/test/test_eme_stream_capture_blocked.html | called finish() multiple times
TEST-INFO
58678 INFO TEST-UNEXPECTED-ERROR | dom/media/test/test_eme_stream_capture_blocked.html | called finish() multiple times
TEST-INFO
58679 INFO TEST-UNEXPECTED-ERROR | dom/media/test/test_eme_stream_capture_blocked.html | called finish() multiple times
TEST-INFO
SUITE-END | took 1884s



I'm guessing this is caused by interacting with a SourceBuffer after it's been detached.

The JS code is in AppendTrack.addNextFragment in the XHR request's "load" event handler:

req.addEventListener("load", function() {
  Log(token, track.name + ": fetch of " + fragmentFile + " complete, appending");
  sb.appendBuffer(new Uint8Array(req.response));
});
Peter, follow up for you?
Flags: needinfo?(peterv)
Component: Audio/Video → Audio/Video: Playback
(Reporter)

Comment 2

2 years ago
I left test_eme_* running over the weekend and hit no failures, so I'll call this fixed.
Status: NEW → RESOLVED
Last Resolved: 2 years ago
Flags: needinfo?(peterv)
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.