Bug 198567 - [GStreamer] Crash in MediaPlayerPrivateGStreamerBase::ensureGstGLContext
Summary: [GStreamer] Crash in MediaPlayerPrivateGStreamerBase::ensureGstGLContext
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebKitGTK (show other bugs)
Version: WebKit Nightly Build
Hardware: PC Linux
: P2 Normal
Assignee: Michael Catanzaro
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-06-05 08:52 PDT by Michael Catanzaro
Modified: 2019-06-05 09:41 PDT (History)
4 users (show)

See Also:


Attachments
Patch (3.04 KB, patch)
2019-06-05 08:56 PDT, Michael Catanzaro
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Catanzaro 2019-06-05 08:52:10 PDT
MediaPlayerPrivateGStreamerBase::ensureGstGLContext is currently a guaranteed crash because it expects PlatformDisplay::sharedDisplayForCompositing() to return a PlatformDisplayLibWPE if compiled with USE(WPE_RENDERER), but PlatformDisplayLibWPE has lower precedence than PlatformDisplayX11 and PlatformDisplayWayland. When running our layout tests with run-webkit-tests --gtk, it's guaranteed to be a PlatformDisplayX11.

I think Carlos was clearly expecting PlatformDisplayLibWPE, so I don't know what the ideal desired behavior is, but the crashes go away if we change the code to allow any type of PlatformDisplay. This should hopefully fix our bots, which are still exiting early.
Comment 1 Michael Catanzaro 2019-06-05 08:54:54 PDT
BTW, it's very unclear from the crash on the release bots:

Thread 1 (Thread 0x7f9040ff9700 (LWP 4838)):
#0  _g_log_abort () at ../../Source/glib-2.58.1/glib/gmessages.c:557
#1  0x00007f914c979485 in g_logv () at ../../Source/glib-2.58.1/glib/gmessages.c:1371
#2  0x00007f914c9795d2 in g_log () at ../../Source/glib-2.58.1/glib/gmessages.c:1413
#3  0x00007f914d8a348d in gst_caps_unref () at ../../Source/gstreamer-1.16.0/gst/gstcaps.h:223
#4  gst_base_transform_default_query () at ../../Source/gstreamer-1.16.0/libs/gst/base/gstbasetransform.c:1552
#5  0x00007f914d7a2b48 in gst_pad_query () at ../../Source/gstreamer-1.16.0/gst/gstpad.c:4071
#6  0x00007f914d7a3121 in gst_pad_peer_query () at ../../Source/gstreamer-1.16.0/gst/gstpad.c:4203
#7  0x00007f914d7df464 in gst_pad_peer_query_caps () at ../../Source/gstreamer-1.16.0/gst/gstutils.c:3107
#8  0x00007f914d8a381c in gst_base_transform_query_caps () at ../../Source/gstreamer-1.16.0/libs/gst/base/gstbasetransform.c:678
#9  gst_base_transform_default_query () at ../../Source/gstreamer-1.16.0/libs/gst/base/gstbasetransform.c:1550
#10 0x00007f914d7a2b48 in gst_pad_query () at ../../Source/gstreamer-1.16.0/gst/gstpad.c:4071
#11 0x00007f914d7a3121 in gst_pad_peer_query () at ../../Source/gstreamer-1.16.0/gst/gstpad.c:4203
#12 0x00007f914d7d9bd8 in query_caps_func () at ../../Source/gstreamer-1.16.0/gst/gstutils.c:2765
#13 0x00007f914d7a175e in gst_pad_forward () at ../../Source/gstreamer-1.16.0/gst/gstpad.c:3008
#14 0x00007f914d7dc672 in gst_pad_proxy_query_caps () at ../../Source/gstreamer-1.16.0/gst/gstutils.c:2815
#15 0x00007f914d7a1a50 in gst_pad_query_caps_default () at ../../Source/gstreamer-1.16.0/gst/gstpad.c:3187
#16 gst_pad_query_default () at ../../Source/gstreamer-1.16.0/gst/gstpad.c:3415
#17 0x00007f914d7a2b48 in gst_pad_query () at ../../Source/gstreamer-1.16.0/gst/gstpad.c:4071
#18 0x00007f914d7dce24 in gst_pad_query_caps () at ../../Source/gstreamer-1.16.0/gst/gstutils.c:3061
#19 0x00007f90f858b998 in autoplug_continue_cb () at ../../Source/gst-plugins-base-1.16.0/gst/playback/gstplaybin2.c:4538
#20 0x00007f914a0298ee in ffi_call_unix64 () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#21 0x00007f914a0292bf in ffi_call () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#22 0x00007f914ca543d8 in g_cclosure_marshal_generic () at ../../Source/glib-2.58.1/gobject/gclosure.c:1496
#23 0x00007f914ca53bc5 in g_closure_invoke () at ../../Source/glib-2.58.1/gobject/gclosure.c:810
#24 0x00007f914ca66752 in signal_emit_unlocked_R () at ../../Source/glib-2.58.1/gobject/gsignal.c:3635
#25 0x00007f914ca6eeb8 in g_signal_emit_valist () at ../../Source/glib-2.58.1/gobject/gsignal.c:3401
#26 0x00007f914ca6f842 in g_signal_emit () at ../../Source/glib-2.58.1/gobject/gsignal.c:3447
#27 0x00007f90f8570815 in proxy_autoplug_continue_signal () at ../../Source/gst-plugins-base-1.16.0/gst/playback/gsturidecodebin.c:1691
#28 0x00007f914a0298ee in ffi_call_unix64 () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#29 0x00007f914a0292bf in ffi_call () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#30 0x00007f914ca543d8 in g_cclosure_marshal_generic () at ../../Source/glib-2.58.1/gobject/gclosure.c:1496
#31 0x00007f914ca53bc5 in g_closure_invoke () at ../../Source/glib-2.58.1/gobject/gclosure.c:810
#32 0x00007f914ca66752 in signal_emit_unlocked_R () at ../../Source/glib-2.58.1/gobject/gsignal.c:3635
#33 0x00007f914ca6eeb8 in g_signal_emit_valist () at ../../Source/glib-2.58.1/gobject/gsignal.c:3401
#34 0x00007f914ca6f842 in g_signal_emit () at ../../Source/glib-2.58.1/gobject/gsignal.c:3447
#35 0x00007f90f8565e0f in analyze_new_pad () at ../../Source/gst-plugins-base-1.16.0/gst/playback/gstdecodebin2.c:1598
#36 0x00007f90f8566be5 in type_found () at ../../Source/gst-plugins-base-1.16.0/gst/playback/gstdecodebin2.c:2883
#37 0x00007f914a0298ee in ffi_call_unix64 () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#38 0x00007f914a0292bf in ffi_call () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#39 0x00007f914ca543d8 in g_cclosure_marshal_generic () at ../../Source/glib-2.58.1/gobject/gclosure.c:1496
#40 0x00007f914ca53bc5 in g_closure_invoke () at ../../Source/glib-2.58.1/gobject/gclosure.c:810
#41 0x00007f914ca66752 in signal_emit_unlocked_R () at ../../Source/glib-2.58.1/gobject/gsignal.c:3635
#42 0x00007f914ca6f435 in g_signal_emit_valist () at ../../Source/glib-2.58.1/gobject/gsignal.c:3391
#43 0x00007f914ca6f842 in g_signal_emit () at ../../Source/glib-2.58.1/gobject/gsignal.c:3447
#44 0x00007f90f83e0676 in gst_type_find_element_loop () at ../../Source/gstreamer-1.16.0/plugins/elements/gsttypefindelement.c:1169
#45 0x00007f914d7d12d1 in gst_task_func () at ../../Source/gstreamer-1.16.0/gst/gsttask.c:328
#46 0x00007f914c99b3be in g_thread_pool_thread_proxy () at ../../Source/glib-2.58.1/glib/gthreadpool.c:307
#47 0x00007f914c99a9e5 in g_thread_proxy () at ../../Source/glib-2.58.1/glib/gthread.c:784
#48 0x00007f914d192fa3 in start_thread (arg=<optimized out>) at pthread_create.c:486
#49 0x00007f914b8774cf in clone () from /lib/x86_64-linux-gnu/libc.so.6

But I *guess* that's somehow indirectly caused because we clobber m_glDisplay here. At least the first crashing test is now passing for me locally with this change.
Comment 2 Michael Catanzaro 2019-06-05 08:56:07 PDT
Created attachment 371401 [details]
Patch
Comment 3 WebKit Commit Bot 2019-06-05 09:41:12 PDT
Comment on attachment 371401 [details]
Patch

Clearing flags on attachment: 371401

Committed r246107: <https://trac.webkit.org/changeset/246107>
Comment 4 WebKit Commit Bot 2019-06-05 09:41:13 PDT
All reviewed patches have been landed.  Closing bug.