Bug 196739

Summary: [GTK][GStreamer] Flaky ASSERTION FAILED: m_lock.isHeld() in TextureMapperPlatformLayerProxy
Product: WebKit Reporter: Alicia Boya García <aboya>
Component: WebKitGTKAssignee: Philippe Normand <pnormand>
Status: RESOLVED FIXED    
Severity: Normal CC: bugs-noreply, calvaris, pnormand
Priority: P2    
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
Attachments:
Description Flags
Patch calvaris: review+

Alicia Boya García
Reported 2019-04-09 11:35:02 PDT
I got this while running imported/w3c/web-platform-tests/media-source/mediasource-timestamp-offset.html, but it's timing dependent. ASSERTION FAILED: m_lock.isHeld() ../../Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp(109) : bool WebCore::TextureMapperPlatformLayerProxy::isActive() 1 0x7f834ac08299 /webkit/WebKitBuild/Debug/lib/libjavascriptcoregtk-4.0.so.18(WTFCrash+0x9) [0x7f834ac08299] 2 0x7f8356f67fc7 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::TextureMapperPlatformLayerProxy::isActive()+0x47) [0x7f8356f67fc7] 3 0x7f835979eb9d /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(+0xd544b9d) [0x7f835979eb9d] 4 0x7f835979ed27 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer()+0x15f) [0x7f835979ed27] 5 0x7f835979c05d /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase()+0x4f) [0x7f835979c05d] 6 0x7f835977b31a /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer()+0x9da) [0x7f835977b31a] 7 0x7f83597ae187 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::MediaPlayerPrivateGStreamerMSE::~MediaPlayerPrivateGStreamerMSE()+0x2f5) [0x7f83597ae187] 8 0x7f83597ae1b0 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::MediaPlayerPrivateGStreamerMSE::~MediaPlayerPrivateGStreamerMSE()+0x18) [0x7f83597ae1b0] 9 0x7f8358c79504 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(std::default_delete<WebCore::MediaPlayerPrivateInterface>::operator()(WebCore::MediaPlayerPrivateInterface*) const+0x2e) [0x7f8358c79504] 10 0x7f8358c78a7d /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(std::unique_ptr<WebCore::MediaPlayerPrivateInterface, std::default_delete<WebCore::MediaPlayerPrivateInterface> >::~unique_ptr()+0x49) [0x7f8358c78a7d] 11 0x7f8358c70f2f /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::MediaPlayer::~MediaPlayer()+0xb7) [0x7f8358c70f2f] 12 0x7f8358c70f6a /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::MediaPlayer::~MediaPlayer()+0x18) [0x7f8358c70f6a] 13 0x7f835858a95c /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WTF::RefCounted<WebCore::MediaPlayer>::deref() const+0x48) [0x7f835858a95c] 14 0x7f83585861d8 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(void WTF::derefIfNotNull<WebCore::MediaPlayer>(WebCore::MediaPlayer*)+0x2c) [0x7f83585861d8] 15 0x7f8358581cf5 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WTF::RefPtr<WebCore::MediaPlayer, WTF::DumbPtrTraits<WebCore::MediaPlayer> >::operator=(decltype(nullptr))+0x33) [0x7f8358581cf5] 16 0x7f835856b8d2 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::HTMLMediaElement::clearMediaPlayer()+0xf8) [0x7f835856b8d2] 17 0x7f835856b69f /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::HTMLMediaElement::userCancelledLoad()+0x43) [0x7f835856b69f] 18 0x7f835856ba5b /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer()+0xad) [0x7f835856ba5b] 19 0x7f835856bc21 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::HTMLMediaElement::stop()+0x2b) [0x7f835856bc21] 20 0x7f835835fc53 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(+0xc105c53) [0x7f835835fc53] 21 0x7f835835fc8a /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(+0xc105c8a) [0x7f835835fc8a] 22 0x7f8358362b1a /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WTF::Function<WebCore::ScriptExecutionContext::ShouldContinue (WebCore::ActiveDOMObject&)>::operator()(WebCore::ActiveDOMObject&) const+0x78) [0x7f8358362b1a] 23 0x7f8358357b85 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::ScriptExecutionContext::forEachActiveDOMObject(WTF::Function<WebCore::ScriptExecutionContext::ShouldContinue (WebCore::ActiveDOMObject&)> const&) const+0xc3) [0x7f8358357b85] 24 0x7f8358357d36 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::ScriptExecutionContext::stopActiveDOMObjects()+0x58) [0x7f8358357d36] 25 0x7f8358211a40 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::Document::stopActiveDOMObjects()+0x1e) [0x7f8358211a40] 26 0x7f835821157a /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::Document::prepareForDestruction()+0x292) [0x7f835821157a] 27 0x7f83589d13d7 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::Frame::setView(WTF::RefPtr<WebCore::FrameView, WTF::DumbPtrTraits<WebCore::FrameView> >&&)+0xaf) [0x7f83589d13d7] 28 0x7f83589d3915 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::Frame::createView(WebCore::IntSize const&, WTF::Optional<WebCore::Color> const&, WebCore::IntSize const&, WebCore::IntRect const&, bool, WebCore::ScrollbarMode, bool, WebCore::ScrollbarMode, bool)+0xed) [0x7f83589d3915] 29 0x7f8356e4fcd3 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage()+0x2ab) [0x7f8356e4fcd3] 30 0x7f8358867534 /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::FrameLoader::transitionToCommitted(WebCore::CachedPage*)+0x4be) [0x7f8358867534] 31 0x7f835886686a /webkit/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::FrameLoader::commitProvisionalLoad()+0x4b4) [0x7f835886686a]
Attachments
Patch (1.57 KB, patch)
2019-04-24 03:30 PDT, Philippe Normand
calvaris: review+
Philippe Normand
Comment 1 2019-04-10 01:54:36 PDT
What's your platform video decoder? The trace indicates the flush is done from the player destructor, that means a v4l2 is used. Can you confirm?
Alicia Boya García
Comment 2 2019-04-23 05:21:23 PDT
(In reply to Philippe Normand from comment #1) > What's your platform video decoder? The trace indicates the flush is done > from the player destructor, that means a v4l2 is used. Can you confirm? I don't think so. According to pipeline dumps a decoder has not even been added to the pipeline at all in this test.
Philippe Normand
Comment 3 2019-04-23 06:59:43 PDT
🤨
Philippe Normand
Comment 4 2019-04-23 07:02:13 PDT
Oh I know, m_videoDecoderPlatform likely is initialized to the first enum value be default, that's no good.
Philippe Normand
Comment 5 2019-04-23 08:50:20 PDT
(In reply to Philippe Normand from comment #4) > Oh I know, m_videoDecoderPlatform likely is initialized to the first enum > value be default, that's no good. It could become a WTF::Optional<T>. I'll write a patch tomorrow if no one else does it first.
Philippe Normand
Comment 6 2019-04-24 03:30:43 PDT
Xabier Rodríguez Calvar
Comment 7 2019-04-24 03:45:52 PDT
Comment on attachment 368118 [details] Patch I tend to think that the proper solution would be: enum class WebKitGstVideoDecoderPlatform { Other, ImxVPU, Video4Linux }; WebKitGstVideoDecoderPlatform m_videoDecoderPlatform { Other }
Philippe Normand
Comment 8 2019-04-24 04:10:48 PDT
Seems to me like a clear case for Optional.
Xabier Rodríguez Calvar
Comment 9 2019-04-24 05:47:19 PDT
Comment on attachment 368118 [details] Patch (In reply to Philippe Normand from comment #8) > Seems to me like a clear case for Optional. I don't have a strong opinion so r+
Philippe Normand
Comment 10 2019-04-24 07:47:49 PDT
Note You need to log in before you can comment on or make changes to this bug.