[Bug 773131] New: playbin3: Fix deadlock when adding multiple parsebin

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Tue Oct 18 05:38:38 UTC 2016


https://bugzilla.gnome.org/show_bug.cgi?id=773131

            Bug ID: 773131
           Summary: playbin3: Fix deadlock when adding multiple parsebin
    Classification: Platform
           Product: GStreamer
           Version: git master
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: Normal
         Component: gst-plugins-base
          Assignee: gstreamer-bugs at lists.freedesktop.org
          Reporter: chul0812 at gmail.com
        QA Contact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---

It can be rarely reproduced with
validate.dash.playback.change_state_intensive.dash_exMPD_BIP_TC1 validate case.

It happens when decodebin consist more than two parsebin in the pipeline such
as the dash case and intensive playback. One holds SourceGroup lock in
urisrc_pad_added() and try to acquire shutdown lock in pad_added_cb(). The
other hold shutdown lock in no_more_pads_cb() and try to get SourceGroup lock.
So I try to release SourceGroup lock before request a pad what will trigger
pad_added_cb() in urisrc_pad_added().

In addition, I saw another type of deadlock with this validate test case which
occurs regardless of this case. (not yet investigated deeply)

* Attached related stack trace

Thread 6 (Thread 0x7fffd758b700 (LWP 1032)):
#0  syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007ffff6899929 in g_mutex_lock_slowpath (mutex=0x80c650)
    at /build/glib2.0-y6934K/glib2.0-2.42.1/./glib/gthread-posix.c:1314
#2  0x00007fffe7fbafd0 in no_more_pads_cb (decodebin=0x7fffcc00dd60,
playbin=0x80c3a0) at gstplaybin3.c:3129
#3  0x00007fffe7fba27e in pad_added_cb (decodebin=0x7fffcc00dd60,
pad=0x7fffb00c7160, playbin=0x80c3a0)
    at gstplaybin3.c:2940
#4  0x00007ffff6b2e53b in g_cclosure_marshal_VOID__OBJECTv (closure=0xc7f9c0,
return_value=<optimized out>, 
    instance=<optimized out>, args=<optimized out>, marshal_data=0x0,
n_params=<optimized out>, param_types=0x61daa0)
    at /build/glib2.0-y6934K/glib2.0-2.42.1/./gobject/gmarshal.c:1312
#5  0x00007ffff6b2b474 in _g_closure_invoke_va (closure=0x80c650,
closure at entry=0xc7f9c0, 
    return_value=return_value at entry=0x0, instance=0x2,
instance at entry=0x7fffcc00dd60, args=0xffffffffffffffff, 
    args at entry=0x7fffd758a6f0, n_params=1, param_types=0x0)
    at /build/glib2.0-y6934K/glib2.0-2.42.1/./gobject/gclosure.c:831
#6  0x00007ffff6b45087 in g_signal_emit_valist (instance=0x7fffcc00dd60,
signal_id=<optimized out>, detail=0, 
    var_args=var_args at entry=0x7fffd758a6f0) at
/build/glib2.0-y6934K/glib2.0-2.42.1/./gobject/gsignal.c:3218
#7  0x00007ffff6b459df in g_signal_emit (instance=<optimized out>,
signal_id=<optimized out>, detail=<optimized out>)
    at /build/glib2.0-y6934K/glib2.0-2.42.1/./gobject/gsignal.c:3365
#8  0x00007ffff6dd28e0 in gst_element_add_pad (element=0x7fffcc00dd60,
pad=0x7fffb00c7160) at gstelement.c:713
#9  0x00007fffe7f87310 in reconfigure_output_stream (output=0x7fffc80caf40,
slot=0x7fff9c00b1c0)
    at gstdecodebin3.c:1891
#10 0x00007fffe7f859eb in multiqueue_src_probe (pad=0x7fffc0026050,
info=0x7fffd758aa40, slot=0x7fff9c00b1c0)
    at gstdecodebin3.c:1480
#11 0x00007ffff6dfad22 in probe_hook_marshal (hook=0x7fffb00024f0,
data=0x7fffd758a9e0) at gstpad.c:3469
#12 0x00007ffff68467f4 in g_hook_list_marshal (hook_list=0x7fffc00260e8,
may_recurse=1, 
    marshaller=0x7ffff6dfaaa3 <probe_hook_marshal>, data=0x7fffd758a9e0)
    at /build/glib2.0-y6934K/glib2.0-2.42.1/./glib/ghook.c:672
#13 0x00007ffff6dfb33d in do_probe_callbacks (pad=0x7fffc0026050,
info=0x7fffd758aa40, defaultval=GST_FLOW_OK)
    at gstpad.c:3621
#14 0x00007ffff6e01057 in gst_pad_push_event_unchecked (pad=0x7fffc0026050,
event=0x7fffc0004cf0, 
    type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at gstpad.c:5238
#15 0x00007ffff6dfbc65 in push_sticky (pad=0x7fffc0026050, ev=0x7fffd758ab40,
user_data=0x7fffd758aba0)
    at gstpad.c:3807
#16 0x00007ffff6df21af in events_foreach (pad=0x7fffc0026050,
func=0x7ffff6dfbb50 <push_sticky>, 
    user_data=0x7fffd758aba0) at gstpad.c:603
#17 0x00007ffff6dfbffe in check_sticky (pad=0x7fffc0026050,
event=0x7fffc0004cf0) at gstpad.c:3864
#18 0x00007ffff6e019a4 in gst_pad_push_event (pad=0x7fffc0026050,
event=0x7fffc0004cf0) at gstpad.c:5395
#19 0x00007fffe7d25cba in gst_single_queue_push_one (mq=0x7fffa4168740,
sq=0x7fff9c013190, object=0x7fffc0004cf0, 
    allow_drop=0x7fffd758acf4) at gstmultiqueue.c:1652
#20 0x00007fffe7d2724b in gst_multi_queue_loop (pad=0x7fffc0026050) at
gstmultiqueue.c:1915
#21 0x00007ffff6e38b90 in gst_task_func (task=0x84c830) at gsttask.c:334
#22 0x00007ffff6e39d24 in default_func (tdata=0x7fffc0006c60, pool=0x61c910) at
gsttaskpool.c:68
#23 0x00007ffff687d1d8 in g_thread_pool_thread_proxy (data=<optimized out>)
#24 0x00007ffff687c845 in g_thread_proxy (data=0x7fffd8034a80)
    at /build/glib2.0-y6934K/glib2.0-2.42.1/./glib/gthread.c:764
#25 0x00007ffff65f70a4 in start_thread (arg=0x7fffd758b700) at
pthread_create.c:309
#26 0x00007ffff632c62d in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 7 (Thread 0x7fffd6d8a700 (LWP 2103)):
#0  syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007ffff6899929 in g_mutex_lock_slowpath (mutex=0x80ced8)
    at /build/glib2.0-y6934K/glib2.0-2.42.1/./glib/gthread-posix.c:1314
#2  0x00007fffe7fb9a38 in pad_added_cb (decodebin=0x839b00, pad=0x7fffa4005b20,
playbin=0x80c9a0)
    at gstplaybin3.c:2807
#3  0x00007ffff6b2e53b in g_cclosure_marshal_VOID__OBJECTv (closure=0x9baec0,
return_value=<optimized out>, 
    instance=<optimized out>, args=<optimized out>, marshal_data=0x0,
n_params=<optimized out>, param_types=0x61daa0)
    at /build/glib2.0-y6934K/glib2.0-2.42.1/./gobject/gmarshal.c:1312
#4  0x00007ffff6b2b3c2 in _g_closure_invoke_va (closure=0x80ced8,
closure at entry=0x9baec0, 
    return_value=return_value at entry=0x0, instance=0x2, instance at entry=0x839b00,
args=0xffffffffffffffff, 
    args at entry=0x7fffd6d88ca0, n_params=1, param_types=0x7fffd6d88c20)
    at /build/glib2.0-y6934K/glib2.0-2.42.1/./gobject/gclosure.c:831
#5  0x00007ffff6b45087 in g_signal_emit_valist (instance=0x839b00,
signal_id=<optimized out>, detail=0, 
    var_args=var_args at entry=0x7fffd6d88ca0) at
/build/glib2.0-y6934K/glib2.0-2.42.1/./gobject/gsignal.c:3218
#6  0x00007ffff6b459df in g_signal_emit (instance=<optimized out>,
signal_id=<optimized out>, detail=<optimized out>)
    at /build/glib2.0-y6934K/glib2.0-2.42.1/./gobject/gsignal.c:3365
#7  0x00007ffff6dd28e0 in gst_element_add_pad (element=0x839b00,
pad=0x7fffa4005b20) at gstelement.c:713
#8  0x00007fffe7f836d3 in create_new_input (dbin=0x839b00, main=0) at
gstdecodebin3.c:861
#9  0x00007fffe7f837d2 in gst_decodebin3_request_new_pad (element=0x839b00,
temp=0x80be70, name=0x0, caps=0x0)
    at gstdecodebin3.c:878
#10 0x00007ffff6dd35cd in _gst_element_request_pad (element=0x839b00,
templ=0x80be70, name=0x0, caps=0x0)
    at gstelement.c:982
#11 0x00007ffff6dd39aa in gst_element_get_request_pad (element=0x839b00,
name=0x7fffe7ff3e0c "sink_%u")
    at gstelement.c:1088
#12 0x00007fffe7fbe9f0 in urisrc_pad_added (urisrc=0x8422b0,
pad=0x7fffa4088530, group=0x80cc48)
    at gstplaybin3.c:4529
#13 0x00007ffff6b2e53b in g_cclosure_marshal_VOID__OBJECTv (closure=0x900d00,
return_value=<optimized out>, 
    instance=<optimized out>, args=<optimized out>, marshal_data=0x0,
n_params=<optimized out>, param_types=0x61daa0)
    at /build/glib2.0-y6934K/glib2.0-2.42.1/./gobject/gmarshal.c:1312
#14 0x00007ffff6b2b474 in _g_closure_invoke_va (closure=0x80ced8,
closure at entry=0x900d00, 
    return_value=return_value at entry=0x0, instance=0x2, instance at entry=0x8422b0,
args=0xffffffffffffffff, 
    args at entry=0x7fffd6d89200, n_params=1, param_types=0x7fffd6d88c20)
    at /build/glib2.0-y6934K/glib2.0-2.42.1/./gobject/gclosure.c:831
#15 0x00007ffff6b45087 in g_signal_emit_valist (instance=0x8422b0,
signal_id=<optimized out>, detail=0, 
    var_args=var_args at entry=0x7fffd6d89200) at
/build/glib2.0-y6934K/glib2.0-2.42.1/./gobject/gsignal.c:3218
#16 0x00007ffff6b459df in g_signal_emit (instance=<optimized out>,
signal_id=<optimized out>, detail=<optimized out>)
    at /build/glib2.0-y6934K/glib2.0-2.42.1/./gobject/gsignal.c:3365
#17 0x00007ffff6dd28e0 in gst_element_add_pad (element=0x8422b0,
pad=0x7fffa4088530) at gstelement.c:713
#18 0x00007fffe7f94073 in expose_output_pad (urisrc=0x8422b0,
pad=0x7fffa4088530) at gsturisourcebin.c:1318
#19 0x00007fffe7f932b7 in pending_pad_blocked (pad=0x7fffd8060270,
info=0x7fffd6d894f0, user_data=0x8422b0)
    at gsturisourcebin.c:990
#20 0x00007ffff6dfad22 in probe_hook_marshal (hook=0x7fffb8b21c50,
data=0x7fffd6d89490) at gstpad.c:3469
#21 0x00007ffff68467f4 in g_hook_list_marshal (hook_list=0x7fffd8060308,
may_recurse=1, 
    marshaller=0x7ffff6dfaaa3 <probe_hook_marshal>, data=0x7fffd6d89490)
    at /build/glib2.0-y6934K/glib2.0-2.42.1/./glib/ghook.c:672
#22 0x00007ffff6dfb33d in do_probe_callbacks (pad=0x7fffd8060270,
info=0x7fffd6d894f0, defaultval=GST_FLOW_OK)
    at gstpad.c:3621
#23 0x00007ffff6e00fc6 in gst_pad_push_event_unchecked (pad=0x7fffd8060270,
event=0x7fffd803c100, 
    type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at gstpad.c:5231
#24 0x00007ffff6dfbc65 in push_sticky (pad=0x7fffd8060270, ev=0x7fffd6d895f0,
user_data=0x7fffd6d89650)
    at gstpad.c:3807
#25 0x00007ffff6df21af in events_foreach (pad=0x7fffd8060270,
func=0x7ffff6dfbb50 <push_sticky>, 
    user_data=0x7fffd6d89650) at gstpad.c:603
#26 0x00007ffff6dfbffe in check_sticky (pad=0x7fffd8060270,
event=0x7fffd803c100) at gstpad.c:3864
#27 0x00007ffff6e019a4 in gst_pad_push_event (pad=0x7fffd8060270,
event=0x7fffd803c100) at gstpad.c:5395
#28 0x00007fffd79c2f09 in gst_adaptive_demux_stream_push_buffer
(stream=0x7fffa00290b0, buffer=0x7fff9c05c9e0)
    at gstadaptivedemux.c:2058
#29 0x00007fffd7df3e82 in gst_dash_demux_data_received (demux=0x7fffb012eb80,
stream=0x7fffa00290b0,

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list