parsebin: SIGSEGV during HLS stream using souphttpsrc
Uprev'd from 1.20.1 with two local changes in kms to 1.20.3, now 100% reproducible SIGSEGV while playing graph that works extremely reliably in 1.20.1. First sign was my python impl getting buffering messages (which it never had before), but followed by crash. Repro'd outside my program, with reduced M3U8 file.
Build/Env:
- Ubuntu 21.10
meson -Dvaapi=enabled -Dbad=enabled -Dugly=enabled builddir
Command (after ninja -C builddir devenv)
GST_DEBUG_FILE=./crash.txt GST_DEBUG=6 gdb --args gst-launch-1.0 \
souphttpsrc location="http://127.0.0.1/1D2E355A-BD2C-4807-91EA-4C2236D2DBED/0/short.m3u8" ! parsebin name=pb ! queue ! vaapih265dec ! \
video/x-raw,format=P010_10LE ! queue max-size-bytes=100663300 ! kmssink connector-id=78 plane-id=55
I set a catch signal SIGSEGV
and here is the tail of the GDB output:
[New Thread 0x7fffbd7fa640 (LWP 1624)]
Pipeline is PREROLLING ...
[New Thread 0x7fffbcff9640 (LWP 1625)]
Got context from element 'vaapidecode_h265-0': gst.vaapi.Display=context, gst.vaapi.Display=(GstVaapiDisplay)"\(GstVaapiDisplayDRM\)\ vaapidisplaydrm1", gst.vaapi.Display.GObject=(GstObject)"\(GstVaapiDisplayDRM\)\ vaapidisplaydrm1";
Got context from element 'souphttpsrc0': gst.soup.session=context, session=(GstSoupSession)NULL;
[New Thread 0x7fff9ffff640 (LWP 1626)]
[New Thread 0x7fff9f7fe640 (LWP 1627)]
[New Thread 0x7fff9effd640 (LWP 1628)]
[New Thread 0x7fff9e7fc640 (LWP 1629)]
[New Thread 0x7fff9dffb640 (LWP 1630)]
[New Thread 0x7fff9d7fa640 (LWP 1631)]
[Switching to Thread 0x7fff9d7fa640 (LWP 1631)]
Thread 60 "task3" hit Catchpoint 1 (signal SIGSEGV), gst_parse_chain_expose (chain=chain@entry=0x7fff88047ae0, endpads=endpads@entry=0x7fff9d7f9340, missing_plugin=missing_plugin@entry=0x7fff9d7f932c, missing_plugin_details=missing_plugin_details@entry=0x7fff80002c00, last_group=last_group@entry=0x7fff9d7f9330, uncollected_streams=uncollected_streams@entry=0x7fff9d7f9334) at ../subprojects/gst-plugins-base/gst/playback/gstparsebin.c:3777
3777 if (p->active_stream && p->active_collection == NULL
(gdb) frame
#0 gst_parse_chain_expose (chain=chain@entry=0x7fff88047ae0, endpads=endpads@entry=0x7fff9d7f9340, missing_plugin=missing_plugin@entry=0x7fff9d7f932c,
missing_plugin_details=missing_plugin_details@entry=0x7fff80002c00, last_group=last_group@entry=0x7fff9d7f9330, uncollected_streams=uncollected_streams@entry=0x7fff9d7f9334)
at ../subprojects/gst-plugins-base/gst/playback/gstparsebin.c:3777
3777 if (p->active_stream && p->active_collection == NULL
(gdb) up
#1 0x00007ffff4c3a8e6 in gst_parse_chain_expose (chain=<optimized out>, endpads=endpads@entry=0x7fff9d7f9340, missing_plugin=missing_plugin@entry=0x7fff9d7f932c,
missing_plugin_details=missing_plugin_details@entry=0x7fff80002c00, last_group=last_group@entry=0x7fff9d7f9330, uncollected_streams=uncollected_streams@entry=0x7fff9d7f9334)
at ../subprojects/gst-plugins-base/gst/playback/gstparsebin.c:3788
3788 ret |= gst_parse_chain_expose (childchain, endpads, missing_plugin,
(gdb)
Output of GST is attached: ourcrash.txt.
Note this version runs just fine using filesrc of a different MP4 instead of the souphttpsrc.
Just for jollies, here's the M3U8: short.m3u8
I can provide the TS files, but they're kinda big. Happy to attach if desired.