After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 773368 - mpegtsbase: GLib-CRITICAL **: g_ptr_array_unref: assertion 'array' failed
mpegtsbase: GLib-CRITICAL **: g_ptr_array_unref: assertion 'array' failed
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gst-plugins-bad
git master
Other Mac OS
: Normal normal
: 1.10.2
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2016-10-22 23:44 UTC by minfrin
Modified: 2016-12-15 10:56 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
Ensure pmt->streams is not unrefed when NULL (836 bytes, patch)
2016-10-22 23:48 UTC, minfrin
committed Details | Review

Description minfrin 2016-10-22 23:44:22 UTC
During running of the following pipeline, an assertion failure is triggered.

Starting program: /usr/local/bin/gst-launch-1.0 --gst-debug=1,tdttsparse:5,videotag:1,souphttpclientsink:2,pixelsample:1 udpsrc multicast-iface=eth0 uri=udp://239.106.0.7:1234 caps=application/x-rtp,media=\(string\)video,clock-rate=\(int\)90000 \! rtpbin \! rtpmp2tdepay \! progressreport update-freq=5 \! tdttsparse \! tsdemux emit-stats=true name=demux \! queue \! mpegvideoparse \! fakesink demux. \! queue \! mpegaudioparse \! fakesink

(gst-launch-1.0:14851): GLib-CRITICAL **: g_ptr_array_unref: assertion 'array' failed

Program received signal SIGTRAP, Trace/breakpoint trap.

Thread 1925182560 (LWP 14868)

  • #0 raise
    at ../nptl/sysdeps/unix/sysv/linux/pt-raise.c line 37
  • #1 g_logv
    from /lib/arm-linux-gnueabihf/libglib-2.0.so.0
  • #2 g_log
    from /lib/arm-linux-gnueabihf/libglib-2.0.so.0
  • #3 g_return_if_fail_warning
    from /lib/arm-linux-gnueabihf/libglib-2.0.so.0
  • #4 _gst_mpegts_pmt_free
    at gstmpegtssection.c line 635
  • #5 _parse_pmt
    at gstmpegtssection.c line 723
  • #6 __common_section_checks
    at gstmpegtssection.c line 166
  • #7 gst_mpegts_section_get_pmt
    at gstmpegtssection.c line 745
  • #8 mpegts_base_apply_pmt
    at mpegtsbase.c line 1067
  • #9 mpegts_base_handle_psi
    at mpegtsbase.c line 1175
  • #10 mpegts_base_chain
    at mpegtsbase.c line 1591
  • #11 gst_pad_chain_data_unchecked
    at gstpad.c line 4205
  • #12 gst_pad_push_data
    at gstpad.c line 4457
  • #13 gst_pad_push
    at gstpad.c line 4576
  • #14 gst_proxy_pad_chain_default
    at gstghostpad.c line 126
  • #15 gst_pad_chain_data_unchecked
    at gstpad.c line 4205
  • #16 gst_pad_push_data
    at gstpad.c line 4457
  • #17 gst_pad_push
    at gstpad.c line 4576
  • #18 gst_base_transform_chain
    at gstbasetransform.c line 2369
  • #19 gst_pad_chain_data_unchecked
    at gstpad.c line 4205
  • #20 gst_pad_push_data
    at gstpad.c line 4457
  • #21 gst_pad_push
    at gstpad.c line 4576
  • #22 gst_rtp_base_depayload_push
    at gstrtpbasedepayload.c line 823
  • #23 gst_rtp_base_depayload_handle_buffer
    at gstrtpbasedepayload.c line 477
  • #24 gst_rtp_base_depayload_chain
    at gstrtpbasedepayload.c line 536
  • #25 gst_pad_chain_data_unchecked
    at gstpad.c line 4205
  • #26 gst_pad_push_data
    at gstpad.c line 4457
  • #27 gst_pad_push
    at gstpad.c line 4576
  • #28 gst_proxy_pad_chain_default
    at gstghostpad.c line 126
  • #29 gst_pad_chain_data_unchecked
    at gstpad.c line 4205
  • #30 gst_pad_push_data
    at gstpad.c line 4457
  • #31 gst_pad_push
    at gstpad.c line 4576
  • #32 gst_rtp_pt_demux_chain
    at gstrtpptdemux.c line 442
  • #33 gst_pad_chain_data_unchecked
    at gstpad.c line 4205
  • #34 gst_pad_push_data
    at gstpad.c line 4457
  • #35 gst_pad_push
    at gstpad.c line 4576
  • #36 pop_and_push_next
    at gstrtpjitterbuffer.c line 3367
  • #37 handle_next_buffer
    at gstrtpjitterbuffer.c line 3466
  • #38 gst_rtp_jitter_buffer_loop
    at gstrtpjitterbuffer.c line 4010
  • #39 gst_task_func
    at gsttask.c line 334
  • #40 default_func
    at gsttaskpool.c line 68
  • #41 ??
    from /lib/arm-linux-gnueabihf/libglib-2.0.so.0
  • #4 _gst_mpegts_pmt_free
    at gstmpegtssection.c line 635
$1 = (GPtrArray *) 0x0
Comment 1 minfrin 2016-10-22 23:45:41 UTC
Trace got a bit messed up, the NULL pointer is here:

 #4  0x76395af4 in _gst_mpegts_pmt_free (pmt=0x184660) at gstmpegtssection.c:635
 635	  g_ptr_array_unref (pmt->streams);
 (gdb) print pmt->streams
 $1 = (GPtrArray *) 0x0
Comment 2 minfrin 2016-10-22 23:48:45 UTC
Created attachment 338277 [details] [review]
Ensure pmt->streams is not unrefed when NULL

In theory this should fix it.
Comment 3 Sebastian Dröge (slomo) 2016-12-15 10:55:05 UTC
That's already fixed, and in 1.10.2 too.

commit d1fa342b71be439105bef9836153b47ff3431934
Author: Edward Hervey <edward@centricular.com>
Date:   Thu Nov 24 11:12:23 2016 +0100

    mpegtssection: Don't free empty streams
    
    Also avoids a useless assertion