gst_element_set_state deadlock

tobatrance henning.hinze at mail.de
Mon Apr 3 09:01:16 UTC 2017


hi.

i'm using ubuntu 16.04 and gstreamer 1.8.3. i'm using the pipeline filesrc
-> decodebin -> appsink. i'm creating and destroying  multiple of these
pipelines within short time and playing different videos concurrently.
before destroying the pipeline I pause them and afterwards set them to
GST_STATE_NULL. somewhen it happens that gst_element_set_state(pipeline,
GST_STATE_NULL) does not return. in this log i'm running two 4k videos.
first comes the backtrace of the mainloop thread. the mutex in frame 1 is a
p_thread_mutex.

#0  0x00007f3fc4f0326d in __lll_lock_wait () at
../sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:135
#1  0x00007f3fc4efce42 in __GI___pthread_mutex_lock (mutex=0x7f3f30041a20)
at ../nptl/pthread_mutex_lock.c:115
        id = -990891411
        __PRETTY_FUNCTION__ = "__pthread_mutex_lock"
        type = 1
        id = <optimized out>
#2  0x00007f3fc61c269d in activate_mode_internal
(new_mode=GST_PAD_MODE_NONE, pad=0x7f3f900ff8f0 [GstPad]) at gstpad.c:1014
        res = 0
        old = <optimized out>
        new = <optimized out>
        dir = <optimized out>
        peer = <optimized out>
        __PRETTY_FUNCTION__ = "activate_mode_internal"
#3  0x00007f3fc61c269d in activate_mode_internal
(pad=pad at entry=0x7f3f900ff8f0 [GstPad], parent=parent at entry=0x7f3f3004c1a0
[GstVaapiDecode], mode=mode at entry=GST_PAD_MODE_PUSH, active=active at entry=0)
at gstpad.c:1185
        res = 0
        old = <optimized out>
        new = <optimized out>
        dir = <optimized out>
        peer = <optimized out>
        __PRETTY_FUNCTION__ = "activate_mode_internal"
#4  0x00007f3fc61c2dcd in gst_pad_set_active (pad=pad at entry=0x7f3f900ff8f0
[GstPad], active=0) at gstpad.c:1079
        parent = 0x7f3f3004c1a0 [GstVaapiDecode]
        old = GST_PAD_MODE_PUSH
        ret = 0
        __func__ = "gst_pad_set_active"
        __PRETTY_FUNCTION__ = "gst_pad_set_active"
#5  0x00007f3fc61a4dbd in activate_pads (vpad=<optimized out>,
ret=0x7ffda8991e90, active=0x7ffda8991edc) at gstelement.c:2736
        pad = 0x7f3f900ff8f0 [GstPad]
        cont = 1
#6  0x00007f3fc61b522c in gst_iterator_fold (it=it at entry=0x7f3f240a6010,
func=func at entry=0x7f3fc61a4da0 <activate_pads>,
ret=ret at entry=0x7ffda8991e90, user_data=user_data at entry=0x7ffda8991edc) at
gstiterator.c:614
        item = 
              {g_type = 23461424, data = {{v_int = -1878001424, v_uint =
2416965872, v_long = 139910976633072, v_ulong = 139910976633072, v_int64 =
139910976633072, v_uint64 = 139910976633072, v_float = -2.83935518e-29,
v_double = 6.9125207030498272e-310, v_pointer = 0x7f3f900ff8f0}, {v_int = 0,
v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0,
v_double = 0, v_pointer = 0x0}}}
        result = GST_ITERATOR_OK
#7  0x00007f3fc61a521a in iterator_activate_fold_with_resync
(iter=iter at entry=0x7f3f240a6010, user_data=user_data at entry=0x7ffda8991edc,
func=0x7f3fc61a4da0 <activate_pads>) at gstelement.c:2760
        ires = <optimized out>
        ret = 
              {g_type = 20, data = {{v_int = 1, v_uint = 1, v_long = 1,
v_ulong = 1, v_int64 = 1, v_uint64 = 1, v_float = 1.40129846e-45, v_double =
4.9406564584124654e-324, v_pointer = 0x1}, {v_int = 0, v_uint = 0, v_long =
0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0,
v_pointer = 0x0}}}
#8  0x00007f3fc61a703e in gst_element_pads_activate
(element=element at entry=0x7f3f3004c1a0 [GstVaapiDecode],
active=active at entry=0) at gstelement.c:2804
        iter = 0x7f3f240a6010
---Type <return> to continue, or q <return> to quit---
        res = 1
        __PRETTY_FUNCTION__ = "gst_element_pads_activate"
#9  0x00007f3fc61a72d6 in gst_element_change_state_func
(element=0x7f3f3004c1a0 [GstVaapiDecode], transition=<optimized out>) at
gstelement.c:2870
        l = <optimized out>
        state = GST_STATE_PAUSED
        next = GST_STATE_READY
        result = GST_STATE_CHANGE_SUCCESS
        __func__ = "gst_element_change_state_func"
        __PRETTY_FUNCTION__ = "gst_element_change_state_func"
#10 0x00007f3fc599e535 in gst_video_decoder_change_state
(element=0x7f3f3004c1a0 [GstVaapiDecode],
transition=GST_STATE_CHANGE_PAUSED_TO_READY)
    at gstvideodecoder.c:2459
        decoder = 0x7f3f3004c1a0 [GstVaapiDecode]
        decoder_class = 0x7f3f8c005850
        ret = <optimized out>
        __PRETTY_FUNCTION__ = "gst_video_decoder_change_state"
#11 0x00007f3fc61a91ce in gst_element_change_state
(element=element at entry=0x7f3f3004c1a0 [GstVaapiDecode],
transition=transition at entry=GST_STATE_CHANGE_PAUSED_TO_READY) at
gstelement.c:2648
        oclass = 0x7f3f8c005850
        ret = GST_STATE_CHANGE_SUCCESS
        __PRETTY_FUNCTION__ = "gst_element_change_state"
#12 0x00007f3fc61a9947 in gst_element_set_state_func (element=0x7f3f3004c1a0
[GstVaapiDecode], state=GST_STATE_READY) at gstelement.c:2602
        current = GST_STATE_PAUSED
        next = <optimized out>
        old_pending = <optimized out>
        ret = <optimized out>
        transition = GST_STATE_CHANGE_PAUSED_TO_READY
        old_ret = <optimized out>
        __func__ = "gst_element_set_state_func"
        __PRETTY_FUNCTION__ = "gst_element_set_state_func"
#13 0x00007f3fc6188365 in gst_bin_change_state_func (next=GST_STATE_READY,
current=GST_STATE_PAUSED, start_time=0, base_time=2803243898520,
element=0x7f3f3004c1a0 [GstVaapiDecode], bin=0x7f3f2c0160d0
[GstVaapiDecodeBin]) at gstbin.c:2414
        child_current = <optimized out>
        found = <optimized out>
        ret = <optimized out>
        locked = <optimized out>
        child_pending = <optimized out>
        child = 0x7f3f3004c1a0 [GstVaapiDecode]
        bin = 0x7f3f2c0160d0 [GstVaapiDecodeBin]
        ret = <optimized out>
        current = GST_STATE_PAUSED
        next = GST_STATE_READY
        have_async = 0
        have_no_preroll = 0
        base_time = 2803243898520
        start_time = 0
---Type <return> to continue, or q <return> to quit---
        it = 0x7f3f4c096260
        done = 0
        data = 
              {g_type = 25945344, data = {{v_int = 805618080, v_uint =
805618080, v_long = 139909365285280, v_ulong = 139909365285280, v_int64 =
139909365285280, v_uint64 = 139909365285280, v_float = 4.82964779e-10,
v_double = 6.9124410918910742e-310, v_pointer = 0x7f3f3004c1a0}, {v_int = 0,
v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0,
v_double = 0, v_pointer = 0x0}}}
        __PRETTY_FUNCTION__ = "gst_bin_change_state_func"
        __func__ = "gst_bin_change_state_func"
#14 0x00007f3fc6188365 in gst_bin_change_state_func (element=0x7f3f2c0160d0
[GstVaapiDecodeBin], transition=GST_STATE_CHANGE_PAUSED_TO_READY) at
gstbin.c:2756
        child = 0x7f3f3004c1a0 [GstVaapiDecode]
        bin = 0x7f3f2c0160d0 [GstVaapiDecodeBin]
        ret = <optimized out>
        current = GST_STATE_PAUSED
        next = GST_STATE_READY
        have_async = 0
        have_no_preroll = 0
        base_time = 2803243898520
        start_time = 0
        it = 0x7f3f4c096260
        done = 0
        data = 
              {g_type = 25945344, data = {{v_int = 805618080, v_uint =
805618080, v_long = 139909365285280, v_ulong = 139909365285280, v_int64 =
139909365285280, v_uint64 = 139909365285280, v_float = 4.82964779e-10,
v_double = 6.9124410918910742e-310, v_pointer = 0x7f3f3004c1a0}, {v_int = 0,
v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0,
v_double = 0, v_pointer = 0x0}}}
        __PRETTY_FUNCTION__ = "gst_bin_change_state_func"
        __func__ = "gst_bin_change_state_func"
#15 0x00007f3f40464a41 in  () at
/usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstvaapi.so
#16 0x00007f3fc61a91ce in gst_element_change_state
(element=element at entry=0x7f3f2c0160d0 [GstVaapiDecodeBin],
transition=transition at entry=GST_STATE_CHANGE_PAUSED_TO_READY) at
gstelement.c:2648
        oclass = 0x7f3f8c041c90
        ret = GST_STATE_CHANGE_SUCCESS
        __PRETTY_FUNCTION__ = "gst_element_change_state"
#17 0x00007f3fc61a9947 in gst_element_set_state_func (element=0x7f3f2c0160d0
[GstVaapiDecodeBin], state=GST_STATE_READY) at gstelement.c:2602
        current = GST_STATE_PAUSED
        next = <optimized out>
        old_pending = <optimized out>
        ret = <optimized out>
        transition = GST_STATE_CHANGE_PAUSED_TO_READY
        old_ret = <optimized out>
        __func__ = "gst_element_set_state_func"
        __PRETTY_FUNCTION__ = "gst_element_set_state_func"
#18 0x00007f3fc6188365 in gst_bin_change_state_func (next=GST_STATE_READY,
current=GST_STATE_PAUSED, start_time=0, base_time=2803243898520,
element=0x7f3f2c0160d0 [GstVaapiDecodeBin], bin=0x1ac4bc0 [GstDecodeBin]) at
gstbin.c:2414
        child_current = <optimized out>
        found = <optimized out>
---Type <return> to continue, or q <return> to quit---
        ret = <optimized out>
        locked = <optimized out>
        child_pending = <optimized out>
        child = 0x7f3f2c0160d0 [GstVaapiDecodeBin]
        bin = 0x1ac4bc0 [GstDecodeBin]
        ret = <optimized out>
        current = GST_STATE_PAUSED
        next = GST_STATE_READY
        have_async = 0
        have_no_preroll = 0
        base_time = 2803243898520
        start_time = 0
        it = 0x7f3f44012bd0
        done = 0
        data = 
              {g_type = 25945344, data = {{v_int = 738287824, v_uint =
738287824, v_long = 139909297955024, v_ulong = 139909297955024, v_int64 =
139909297955024, v_uint64 = 139909297955024, v_float = 1.83857443e-12,
v_double = 6.9124377653344327e-310, v_pointer = 0x7f3f2c0160d0}, {v_int = 0,
v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0,
v_double = 0, v_pointer = 0x0}}}
        __PRETTY_FUNCTION__ = "gst_bin_change_state_func"
        __func__ = "gst_bin_change_state_func"
#19 0x00007f3fc6188365 in gst_bin_change_state_func (element=0x1ac4bc0
[GstDecodeBin], transition=GST_STATE_CHANGE_PAUSED_TO_READY) at
gstbin.c:2756
        child = 0x7f3f2c0160d0 [GstVaapiDecodeBin]
        bin = 0x1ac4bc0 [GstDecodeBin]
        ret = <optimized out>
        current = GST_STATE_PAUSED
        next = GST_STATE_READY
        have_async = 0
        have_no_preroll = 0
        base_time = 2803243898520
        start_time = 0
        it = 0x7f3f44012bd0
        done = 0
        data = 
              {g_type = 25945344, data = {{v_int = 738287824, v_uint =
738287824, v_long = 139909297955024, v_ulong = 139909297955024, v_int64 =
139909297955024, v_uint64 = 139909297955024, v_float = 1.83857443e-12,
v_double = 6.9124377653344327e-310, v_pointer = 0x7f3f2c0160d0}, {v_int = 0,
v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0,
v_double = 0, v_pointer = 0x0}}}
        __PRETTY_FUNCTION__ = "gst_bin_change_state_func"
        __func__ = "gst_bin_change_state_func"
#20 0x00007f3fb80a7e57 in gst_decode_bin_change_state (element=0x1ac4bc0
[GstDecodeBin], transition=GST_STATE_CHANGE_PAUSED_TO_READY) at
gstdecodebin2.c:5296
        bret = <optimized out>
        ret = GST_STATE_CHANGE_SUCCESS
        dbin = 0x1ac4bc0 [GstDecodeBin]
        chain_to_free = 0x0
        __PRETTY_FUNCTION__ = "gst_decode_bin_change_state"
#21 0x00007f3fc61a91ce in gst_element_change_state
(element=element at entry=0x1ac4bc0 [GstDecodeBin],
transition=transition at entry=GST_STATE_CHANGE_PAUSED_TO_READY)
---Type <return> to continue, or q <return> to quit---
    at gstelement.c:2648
        oclass = 0x1abf420
        ret = GST_STATE_CHANGE_SUCCESS
        __PRETTY_FUNCTION__ = "gst_element_change_state"
#22 0x00007f3fc61a9947 in gst_element_set_state_func (element=0x1ac4bc0
[GstDecodeBin], state=GST_STATE_READY) at gstelement.c:2602
        current = GST_STATE_PAUSED
        next = <optimized out>
        old_pending = <optimized out>
        ret = <optimized out>
        transition = GST_STATE_CHANGE_PAUSED_TO_READY
        old_ret = <optimized out>
        __func__ = "gst_element_set_state_func"
        __PRETTY_FUNCTION__ = "gst_element_set_state_func"
#23 0x00007f3fc6188365 in gst_bin_change_state_func (next=GST_STATE_READY,
current=GST_STATE_PAUSED, start_time=0, base_time=2803243898520,
element=0x1ac4bc0 [GstDecodeBin], bin=0x7f3f9c018a50 [GstPipeline]) at
gstbin.c:2414
        child_current = <optimized out>
        found = <optimized out>
        ret = <optimized out>
        locked = <optimized out>
        child_pending = <optimized out>
        child = 0x1ac4bc0 [GstDecodeBin]
        bin = 0x7f3f9c018a50 [GstPipeline]
        ret = <optimized out>
        current = GST_STATE_PAUSED
        next = GST_STATE_READY
        have_async = 0
        have_no_preroll = 0
        base_time = 2803243898520
        start_time = 0
        it = 0x7f3f44012ed0
        done = 0
        data = 
              {g_type = 25945344, data = {{v_int = 28068800, v_uint =
28068800, v_long = 28068800, v_ulong = 28068800, v_int64 = 28068800,
v_uint64 = 28068800, v_float = 6.32915173e-38, v_double =
1.3867829799988781e-316, v_pointer = 0x1ac4bc0}, {v_int = 0, v_uint = 0,
v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double =
0, v_pointer = 0x0}}}
        __PRETTY_FUNCTION__ = "gst_bin_change_state_func"
        __func__ = "gst_bin_change_state_func"
#24 0x00007f3fc6188365 in gst_bin_change_state_func (element=0x7f3f9c018a50
[GstPipeline], transition=GST_STATE_CHANGE_PAUSED_TO_READY) at gstbin.c:2756
        child = 0x1ac4bc0 [GstDecodeBin]
        bin = 0x7f3f9c018a50 [GstPipeline]
        ret = <optimized out>
        current = GST_STATE_PAUSED
        next = GST_STATE_READY
        have_async = 0
        have_no_preroll = 0
---Type <return> to continue, or q <return> to quit---
        base_time = 2803243898520
        start_time = 0
        it = 0x7f3f44012ed0
        done = 0
        data = 
              {g_type = 25945344, data = {{v_int = 28068800, v_uint =
28068800, v_long = 28068800, v_ulong = 28068800, v_int64 = 28068800,
v_uint64 = 28068800, v_float = 6.32915173e-38, v_double =
1.3867829799988781e-316, v_pointer = 0x1ac4bc0}, {v_int = 0, v_uint = 0,
v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double =
0, v_pointer = 0x0}}}
        __PRETTY_FUNCTION__ = "gst_bin_change_state_func"
        __func__ = "gst_bin_change_state_func"
#25 0x00007f3fc61a91ce in gst_element_change_state
(element=element at entry=0x7f3f9c018a50 [GstPipeline],
transition=transition at entry=GST_STATE_CHANGE_PAUSED_TO_READY) at
gstelement.c:2648
        oclass = 0x18d9800
        ret = GST_STATE_CHANGE_SUCCESS
        __PRETTY_FUNCTION__ = "gst_element_change_state"
#26 0x00007f3fc61a9947 in gst_element_set_state_func (element=0x7f3f9c018a50
[GstPipeline], state=GST_STATE_NULL) at gstelement.c:2602
        current = GST_STATE_PAUSED
        next = <optimized out>
        old_pending = <optimized out>
        ret = <optimized out>
        transition = GST_STATE_CHANGE_PAUSED_TO_READY
        old_ret = <optimized out>
        __func__ = "gst_element_set_state_func"
        __PRETTY_FUNCTION__ = "gst_element_set_state_func"
#27 0x0000000000948e3f in gst_media_object::changeState(GstState, bool)
(this=0x22611a0, _state=GST_STATE_NULL, _verbose=true)

here's the bt of a qtdemux thread

#0  0x00007f3fc43898e9 in syscall () at
../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007f3fc5c7abdf in g_cond_wait (cond=cond at entry=0x7f3f24049390,
mutex=mutex at entry=0x7f3f24049368)
    at /build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gthread-posix.c:1394
        sampled = 5877
#2  0x00007f3fc3174b82 in gst_data_queue_push (queue=0x7f3f240493c0
[GstDataQueue], item=item at entry=0x7f3f4c0c4920) at gstdataqueue.c:520
        priv = 0x7f3f24049340
        __func__ = "gst_data_queue_push"
#3  0x00007f3fb05c6ab5 in gst_multi_queue_chain (pad=<optimized out>,
parent=<optimized out>, buffer=0x2180bc0) at gstmultiqueue.c:1891
        sq = 0x7f3f780be0b0
        mq = 0x7f3f6c091230 [GstMultiQueue]
        item = 0x7f3f4c0c4920
        curid = <optimized out>
        timestamp = 16832000000
        duration = 21333333
        __PRETTY_FUNCTION__ = "gst_multi_queue_chain"
#4  0x00007f3fc61be59f in gst_pad_push_data (data=0x2180bc0, type=4112,
pad=0x7f3f340436b0 [GstPad]) at gstpad.c:4188
        chainfunc = 0x7f3fb05c69c0 <gst_multi_queue_chain>
        parent = 0x7f3f6c091230 [GstMultiQueue]
        ret = <optimized out>
        handled = 0
        peer = 0x7f3f340436b0 [GstPad]
        ret = <optimized out>
        handled = 0
        __PRETTY_FUNCTION__ = "gst_pad_push_data"
#5  0x00007f3fc61be59f in gst_pad_push_data (pad=pad at entry=0x7f3f280234a0
[GstPad], type=type at entry=4112, data=data at entry=0x2180bc0) at gstpad.c:4440
        peer = 0x7f3f340436b0 [GstPad]
        ret = <optimized out>
        handled = 0
        __PRETTY_FUNCTION__ = "gst_pad_push_data"
#6  0x00007f3fc61c6543 in gst_pad_push (pad=0x7f3f280234a0 [GstPad],
buffer=0x2180bc0) at gstpad.c:4559
        res = <optimized out>
        __func__ = "gst_pad_push"
#7  0x00007f3f881a27c7 in  () at
/usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstisomp4.so
#8  0x00007f3f881bbab7 in  () at
/usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstisomp4.so
#9  0x00007f3fc61f0f31 in gst_task_func (task=0x7f3f1c04e4d0 [GstTask]) at
gsttask.c:332
        lock = 0x7f3f14013ba0
        tself = 0x7f3f28098770
        priv = 0x7f3f1c04e480
        __PRETTY_FUNCTION__ = "gst_task_func"
#10 0x00007f3fc5c5d54e in g_thread_pool_thread_proxy (data=<optimized out>)
at /build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gthreadpool.c:307
        task = 0x7f3f3400aa50
        pool = 0x18c8e00
#11 0x00007f3fc5c5cbb5 in g_thread_proxy (data=0x7f3f28098770) at
/build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gthread.c:780
        thread = 0x7f3f28098770
#12 0x00007f3fc4efa6ba in start_thread (arg=0x7f3f03777700) at
pthread_create.c:333
---Type <return> to continue, or q <return> to quit---
        __res = <optimized out>
        pd = 0x7f3f03777700
        now = <optimized out>
        unwind_buf = 
              {cancel_jmp_buf = {{jmp_buf = {139908617828096,
4465231497355108243, 0, 139910103163487, 8388608, 139908761057232,
-4356750446556307565, -4357169156185481325}, mask_was_saved = 0}}, priv =
{pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype =
0}}}
        not_first_call = <optimized out>
        pagesize_m1 = <optimized out>
        sp = <optimized out>
        freesize = <optimized out>
        __PRETTY_FUNCTION__ = "start_thread"
#13 0x00007f3fc438f82d in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:109

thats the bt of a multiqueue, probably for one of the pipelines:

#0  0x00007f3fc43898e9 in syscall () at
../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007f3fc5c7abdf in g_cond_wait (cond=cond at entry=0x7f3f780be250,
mutex=mutex at entry=0x7f3f6c0913a0)
    at /build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gthread-posix.c:1394
        sampled = 3558
#2  0x00007f3fb05c7b65 in gst_multi_queue_loop (pad=<optimized out>) at
gstmultiqueue.c:1647
        sq = 0x7f3f780be0b0
        item = <optimized out>
        sitem = 0x7f3f4c0c4760
        mq = 0x7f3f6c091230 [GstMultiQueue]
        object = <optimized out>
        newid = 5532
        result = <optimized out>
        next_time = 16932666666
        is_buffer = 1
        do_update_buffering = 0
        dropping = 0
        __PRETTY_FUNCTION__ = "gst_multi_queue_loop"
#3  0x00007f3fc61f0f31 in gst_task_func (task=0x7f3f78022830 [GstTask]) at
gsttask.c:332
        lock = 0x7f3f2c0c7740
        tself = 0x7f3f7000c720
        priv = 0x7f3f780227e0
        __PRETTY_FUNCTION__ = "gst_task_func"
#4  0x00007f3fc5c5d54e in g_thread_pool_thread_proxy (data=<optimized out>)
at /build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gthreadpool.c:307
        task = 0x7f3f9000b430
        pool = 0x18c8e00
#5  0x00007f3fc5c5cbb5 in g_thread_proxy (data=0x7f3f7000c720) at
/build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gthread.c:780
        thread = 0x7f3f7000c720
#6  0x00007f3fc4efa6ba in start_thread (arg=0x7f3f20ebf700) at
pthread_create.c:333
        __res = <optimized out>
        pd = 0x7f3f20ebf700
        now = <optimized out>
        unwind_buf = 
              {cancel_jmp_buf = {{jmp_buf = {139909112002304,
4465231497355108243, 0, 139908886815327, 8388608, 139909500059584,
-4356685407866544237, -4357169156185481325}, mask_was_saved = 0}}, priv =
{pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype =
0}}}
        not_first_call = <optimized out>
        pagesize_m1 = <optimized out>
        sp = <optimized out>
        freesize = <optimized out>
        __PRETTY_FUNCTION__ = "start_thread"
#7  0x00007f3fc438f82d in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:109


here's the bt for the other multiqueue: this is also the thread which owns
the mutex i'm waiting for in the main thread. this thread waits for a gmutex
i can't futher investigate. any hints?

#0  0x00007f3fc43898e9 in syscall () at
../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007f3fc5c7abdf in g_cond_wait (cond=0x7f3f3004c630,
mutex=0x7f3f3004c628) at
/build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gthread-posix.c:1394
        sampled = 1913
#2  0x00007f3f4045981b in  () at
/usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstvaapi.so
#3  0x00007f3fc59994c6 in gst_video_decoder_decode_frame
(decoder=decoder at entry=0x7f3f3004c1a0 [GstVaapiDecode],
frame=0x7f3fac029720) at gstvideodecoder.c:3329
        priv = 0x7f3f3004c000
        decoder_class = 0x7f3f8c005850
        ret = GST_FLOW_OK
        __func__ = "gst_video_decoder_decode_frame"
        __PRETTY_FUNCTION__ = "gst_video_decoder_decode_frame"
#4  0x00007f3fc59a168c in gst_video_decoder_have_frame
(decoder=0x7f3f3004c1a0 [GstVaapiDecode]) at gstvideodecoder.c:3261
        priv = 0x7f3f3004c000
        buffer = 0x7f3f4c0a56c0
        n_available = <optimized out>
        pts = <optimized out>
        dts = <optimized out>
        duration = <optimized out>
        ret = GST_FLOW_OK
        __PRETTY_FUNCTION__ = "gst_video_decoder_have_frame"
#5  0x00007f3f4045868a in  () at
/usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstvaapi.so
#6  0x00007f3fc5999816 in gst_video_decoder_parse_available
(dec=dec at entry=0x7f3f3004c1a0 [GstVaapiDecode], at_eos=at_eos at entry=0,
new_buffer=0, 
    new_buffer at entry=1) at gstvideodecoder.c:894
        decoder_class = 0x7f3f8c005850
        priv = 0x7f3f3004c000
        ret = GST_FLOW_OK
        was_available = 26395
        available = 26395
        inactive = 0
        __PRETTY_FUNCTION__ = "gst_video_decoder_parse_available"
#7  0x00007f3fc59999c4 in gst_video_decoder_chain_forward
(decoder=decoder at entry=0x7f3f3004c1a0 [GstVaapiDecode],
buf=buf at entry=0x7f3f2407fe50, at_eos=at_eos at entry=0) at
gstvideodecoder.c:2117
        priv = 0x7f3f3004c000
        klass = <optimized out>
        ret = GST_FLOW_OK
        __func__ = "gst_video_decoder_chain_forward"
#8  0x00007f3fc599c173 in gst_video_decoder_chain (pad=<optimized out>,
parent=0x7f3f3004c1a0 [GstVaapiDecode], buf=0x7f3f2407fe50) at
gstvideodecoder.c:2413
        decoder = 0x7f3f3004c1a0 [GstVaapiDecode]
        ret = GST_FLOW_OK
        __PRETTY_FUNCTION__ = "gst_video_decoder_chain"
#9  0x00007f3fc61be59f in gst_pad_push_data (data=0x7f3f2407fe50, type=4112,
pad=0x7f3f900ff8f0 [GstPad]) at gstpad.c:4188
        chainfunc = 0x7f3fc599be80 <gst_video_decoder_chain>
        parent = 0x7f3f3004c1a0 [GstVaapiDecode]
        ret = <optimized out>
        handled = 0
        peer = 0x7f3f900ff8f0 [GstPad]
---Type <return> to continue, or q <return> to quit---
        ret = <optimized out>
        handled = 0
        __PRETTY_FUNCTION__ = "gst_pad_push_data"
#10 0x00007f3fc61be59f in gst_pad_push_data (pad=pad at entry=0x7f3f8c02a2a0
[GstProxyPad], type=type at entry=4112, data=data at entry=0x7f3f2407fe50) at
gstpad.c:4440
        peer = 0x7f3f900ff8f0 [GstPad]
        ret = <optimized out>
        handled = 0
        __PRETTY_FUNCTION__ = "gst_pad_push_data"
#11 0x00007f3fc61c6543 in gst_pad_push (pad=pad at entry=0x7f3f8c02a2a0
[GstProxyPad], buffer=buffer at entry=0x7f3f2407fe50) at gstpad.c:4559
        res = <optimized out>
        __func__ = "gst_pad_push"
#12 0x00007f3fc61af563 in gst_proxy_pad_chain_default (pad=0x7f3f8c046c80
[GstGhostPad], parent=<optimized out>, buffer=0x7f3f2407fe50) at
gstghostpad.c:126
        res = <optimized out>
        internal = 0x7f3f8c02a2a0 [GstProxyPad]
        __func__ = "gst_proxy_pad_chain_default"
#13 0x00007f3fc61be59f in gst_pad_push_data (data=0x7f3f2407fe50, type=4112,
pad=0x7f3f8c046c80 [GstGhostPad]) at gstpad.c:4188
        chainfunc = 0x7f3fc61af4b0 <gst_proxy_pad_chain_default>
        parent = 0x7f3f2c0160d0 [GstVaapiDecodeBin]
        ret = <optimized out>
        handled = 0
        peer = 0x7f3f8c046c80 [GstGhostPad]
        ret = <optimized out>
        handled = 0
        __PRETTY_FUNCTION__ = "gst_pad_push_data"
#14 0x00007f3fc61be59f in gst_pad_push_data (pad=pad at entry=0x7f3fac07cde0
[GstPad], type=type at entry=4112, data=data at entry=0x7f3f2407fe50) at
gstpad.c:4440
        peer = 0x7f3f8c046c80 [GstGhostPad]
        ret = <optimized out>
        handled = 0
        __PRETTY_FUNCTION__ = "gst_pad_push_data"
#15 0x00007f3fc61c6543 in gst_pad_push (pad=0x7f3fac07cde0 [GstPad],
buffer=0x7f3f2407fe50) at gstpad.c:4559
        res = <optimized out>
        __func__ = "gst_pad_push"
#16 0x00007f3fc316452d in gst_base_transform_chain (pad=<optimized out>,
parent=0x7f3f1800c2d0 [GstCapsFilter], buffer=<optimized out>)
    at gstbasetransform.c:2369
        position_out = <optimized out>
        trans = 0x7f3f1800c2d0 [GstCapsFilter]
        klass = 0x7f3f9c007640
        priv = 0x7f3f1800c200
        ret = <optimized out>
        position = 16880000000
        timestamp = <optimized out>
        duration = <optimized out>
        outbuf = 0x7f3f2407fe50
        __PRETTY_FUNCTION__ = "gst_base_transform_chain"
#17 0x00007f3fc61be59f in gst_pad_push_data (data=0x7f3f2407fe50, type=4112,
pad=0x22dc2a0 [GstPad]) at gstpad.c:4188
---Type <return> to continue, or q <return> to quit---
        chainfunc = 0x7f3fc31643a0 <gst_base_transform_chain>
        parent = 0x7f3f1800c2d0 [GstCapsFilter]
        ret = <optimized out>
        handled = 0
        peer = 0x22dc2a0 [GstPad]
        ret = <optimized out>
        handled = 0
        __PRETTY_FUNCTION__ = "gst_pad_push_data"
#18 0x00007f3fc61be59f in gst_pad_push_data (pad=pad at entry=0x7f3f6c0aa2a0
[GstPad], type=type at entry=4112, data=data at entry=0x7f3f2407fe50) at
gstpad.c:4440
        peer = 0x22dc2a0 [GstPad]
        ret = <optimized out>
        handled = 0
        __PRETTY_FUNCTION__ = "gst_pad_push_data"
#19 0x00007f3fc61c6543 in gst_pad_push (pad=0x7f3f6c0aa2a0 [GstPad],
buffer=buffer at entry=0x7f3f2407fe50) at gstpad.c:4559
        res = <optimized out>
        __func__ = "gst_pad_push"
#20 0x00007f3fc3148099 in gst_base_parse_push_frame
(parse=parse at entry=0x7f3f78099260 [GstH264Parse],
frame=frame at entry=0x7f3f34021e80) at gstbaseparse.c:2533
        ret = GST_FLOW_OK
        last_start = <optimized out>
        last_stop = 16880000000
        klass = <optimized out>
        buffer = 0x7f3f2407fe50
        size = <optimized out>
        __func__ = "gst_base_parse_push_frame"
        __PRETTY_FUNCTION__ = "gst_base_parse_push_frame"
#21 0x00007f3fc314bf8f in gst_base_parse_finish_frame (frame=0x7f3f34021e80,
parse=0x7f3f78099260 [GstH264Parse]) at gstbaseparse.c:2352
        offset = <optimized out>
        buffer = 0x7f3f2407fe50
        __func__ = "gst_base_parse_finish_frame"
        __PRETTY_FUNCTION__ = "gst_base_parse_finish_frame"
#22 0x00007f3fc314bf8f in gst_base_parse_finish_frame
(parse=parse at entry=0x7f3f78099260 [GstH264Parse],
frame=frame at entry=0x7f3f34021e80, size=<optimized out>)
    at gstbaseparse.c:2691
        __func__ = "gst_base_parse_finish_frame"
        __PRETTY_FUNCTION__ = "gst_base_parse_finish_frame"
#23 0x00007f3fb016604f in gst_h264_parse_handle_frame (frame=0x7f3f34021e80,
parse=0x7f3f78099260 [GstH264Parse]) at gsth264parse.c:1021
        h264parse = 0x7f3f78099260 [GstH264Parse]
        buffer = <optimized out>
        ret = <optimized out>
        nalu = 
              {ref_idc = 0, type = 0, idr_pic_flag = 0 '\000', size = 0,
offset = 0, sc_offset = 0, valid = 0, data = 0x0, header_bytes = 0 '\000',
extension_type = 0 '\000', extension = {mvc = {non_idr_flag = 0 '\000',
priority_id = 0 '\000', view_id = 0, temporal_id = 0 '\000', anchor_pic_flag
= 0 '\000', inter_view_flag = 0 '\000'}}}
        nl = <optimized out>
        parse_res = GST_H264_PARSER_ERROR
        map = 
---Type <return> to continue, or q <return> to quit---
            {memory = 0x7f3f78032000, flags = GST_MAP_READ, data =
0x7f3f78032090 "", size = 26395, maxsize = 26402, user_data = {0x671b, 0x0,
0x7f3f78099260, 0x48}, _gst_reserved = {0x7f3fc64784b0 <_gst_debug_min>,
0x7f3f137fec0c, 0x7f3f2407fa10, 0x0}}
        left = 26395
        h264parse = 0x7f3f78099260 [GstH264Parse]
        buffer = <optimized out>
        map = 
            {memory = 0x7f3f78032000, flags = GST_MAP_READ, data =
0x7f3f78032090 "", size = 26395, maxsize = 26402, user_data = {0x671b, 0x0,
0x7f3f78099260, 0x48}, _gst_reserved = {0x7f3fc64784b0 <_gst_debug_min>,
0x7f3f137fec0c, 0x7f3f2407fa10, 0x0}}
        data = <optimized out>
        size = <optimized out>
        current_off = 0
        drain = <optimized out>
        nonext = <optimized out>
        nalparser = <optimized out>
        nalu = 
              {ref_idc = 0, type = 0, idr_pic_flag = 0 '\000', size = 0,
offset = 0, sc_offset = 80000000, valid = 0, data = 0xdfd0c0c00 <error:
Cannot access memory at address 0xdfd0c0c00>, header_bytes = 0 '\000',
extension_type = 0 '\000', extension = {mvc = {non_idr_flag = 0 '\000',
priority_id = 0 '\000', view_id = 0, temporal_id = 0 '\000', anchor_pic_flag
= 0 '\000', inter_view_flag = 0 '\000'}}}
        pres = <optimized out>
        framesize = <optimized out>
        __func__ = "gst_h264_parse_handle_frame"
#24 0x00007f3fb016604f in gst_h264_parse_handle_frame (parse=0x7f3f78099260
[GstH264Parse], frame=0x7f3f34021e80, skipsize=<optimized out>)
    at gsth264parse.c:1065
        h264parse = 0x7f3f78099260 [GstH264Parse]
        buffer = <optimized out>
        map = 
            {memory = 0x7f3f78032000, flags = GST_MAP_READ, data =
0x7f3f78032090 "", size = 26395, maxsize = 26402, user_data = {0x671b, 0x0,
0x7f3f78099260, 0x48}, _gst_reserved = {0x7f3fc64784b0 <_gst_debug_min>,
0x7f3f137fec0c, 0x7f3f2407fa10, 0x0}}
        data = <optimized out>
        size = <optimized out>
        current_off = 0
        drain = <optimized out>
        nonext = <optimized out>
        nalparser = <optimized out>
        nalu = 
              {ref_idc = 0, type = 0, idr_pic_flag = 0 '\000', size = 0,
offset = 0, sc_offset = 80000000, valid = 0, data = 0xdfd0c0c00 <error:
Cannot access memory at address 0xdfd0c0c00>, header_bytes = 0 '\000',
extension_type = 0 '\000', extension = {mvc = {non_idr_flag = 0 '\000',
priority_id = 0 '\000', view_id = 0, temporal_id = 0 '\000', anchor_pic_flag
= 0 '\000', inter_view_flag = 0 '\000'}}}
        pres = <optimized out>
        framesize = <optimized out>
        __func__ = "gst_h264_parse_handle_frame"
#25 0x00007f3fc31444b0 in gst_base_parse_handle_buffer
(parse=parse at entry=0x7f3f78099260 [GstH264Parse], buffer=<optimized out>,
skip=skip at entry=0x7f3f137fec08, flushed=flushed at entry=0x7f3f137fec0c) at
gstbaseparse.c:2166
        klass = 0x7f3f9c039000
        frame = 0x7f3f34021e80
---Type <return> to continue, or q <return> to quit---
        ret = <optimized out>
        __func__ = "gst_base_parse_handle_buffer"
        __PRETTY_FUNCTION__ = "gst_base_parse_handle_buffer"
#26 0x00007f3fc3148dae in gst_base_parse_chain (pad=<optimized out>,
parent=0x7f3f78099260 [GstH264Parse], buffer=<optimized out>) at
gstbaseparse.c:3230
        flush = 0
        updated_prev_pts = <optimized out>
        bclass = <optimized out>
        parse = 0x7f3f78099260 [GstH264Parse]
        ret = GST_FLOW_OK
        old_ret = GST_FLOW_OK
        tmpbuf = <optimized out>
        skip = 0
        min_size = <optimized out>
        av = 26395
        pts = 16840000000
        dts = <optimized out>
        __PRETTY_FUNCTION__ = "gst_base_parse_chain"
#27 0x00007f3fc61be59f in gst_pad_push_data (data=0x7f3f4c0a56c0, type=4112,
pad=0x22dd4a0 [GstPad]) at gstpad.c:4188
        chainfunc = 0x7f3fc3148620 <gst_base_parse_chain>
        parent = 0x7f3f78099260 [GstH264Parse]
        ret = <optimized out>
        handled = 0
        peer = 0x22dd4a0 [GstPad]
        ret = <optimized out>
        handled = 0
        __PRETTY_FUNCTION__ = "gst_pad_push_data"
#28 0x00007f3fc61be59f in gst_pad_push_data (pad=pad at entry=0x22dc720
[GstPad], type=type at entry=4112, data=data at entry=0x7f3f4c0a56c0) at
gstpad.c:4440
        peer = 0x22dd4a0 [GstPad]
        ret = <optimized out>
        handled = 0
        __PRETTY_FUNCTION__ = "gst_pad_push_data"
#29 0x00007f3fc61c6543 in gst_pad_push (pad=0x22dc720 [GstPad],
buffer=buffer at entry=0x7f3f4c0a56c0) at gstpad.c:4559
        res = <optimized out>
        __func__ = "gst_pad_push"
#30 0x00007f3fb05c8124 in gst_multi_queue_loop (allow_drop=<synthetic
pointer>, object=0x7f3f4c0a56c0, sq=0x7f3f780a7170, mq=0x7f3f6c091230
[GstMultiQueue])
    at gstmultiqueue.c:1417
        buffer = 0x7f3f4c0a56c0
        timestamp = 16800000000
        duration = <optimized out>
        result = GST_FLOW_OK
        sq = 0x7f3f780a7170
        item = <optimized out>
        sitem = 0x7f3f4c0dad50
        mq = 0x7f3f6c091230 [GstMultiQueue]
        object = <optimized out>
---Type <return> to continue, or q <return> to quit---
        newid = 5534
        result = <optimized out>
        next_time = <optimized out>
        is_buffer = 1
        do_update_buffering = 0
        dropping = 0
        __PRETTY_FUNCTION__ = "gst_multi_queue_loop"
#31 0x00007f3fb05c8124 in gst_multi_queue_loop (pad=<optimized out>) at
gstmultiqueue.c:1701
        sq = 0x7f3f780a7170
        item = <optimized out>
        sitem = 0x7f3f4c0dad50
        mq = 0x7f3f6c091230 [GstMultiQueue]
        object = <optimized out>
        newid = 5534
        result = <optimized out>
        next_time = <optimized out>
        is_buffer = 1
        do_update_buffering = 0
        dropping = 0
        __PRETTY_FUNCTION__ = "gst_multi_queue_loop"
#32 0x00007f3fc61f0f31 in gst_task_func (task=0x1adaef0 [GstTask]) at
gsttask.c:332
        lock = 0x22dc790
        tself = 0x7f3f34026230
        priv = 0x1adaea0
        __PRETTY_FUNCTION__ = "gst_task_func"
#33 0x00007f3fc5c5d54e in g_thread_pool_thread_proxy (data=<optimized out>)
at /build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gthreadpool.c:307
        task = 0x1abefb0
        pool = 0x18c8e00
#34 0x00007f3fc5c5cbb5 in g_thread_proxy (data=0x7f3f34026230) at
/build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gthread.c:780
        thread = 0x7f3f34026230
#35 0x00007f3fc4efa6ba in start_thread (arg=0x7f3f137ff700) at
pthread_create.c:333
        __res = <optimized out>
        pd = 0x7f3f137ff700
        now = <optimized out>
        unwind_buf = 
              {cancel_jmp_buf = {{jmp_buf = {139908886820608,
4465231497355108243, 0, 139908861633119, 8388608, 139910774439568,
-4356785566503886957, -4357169156185481325}, mask_was_saved = 0}}, priv =
{pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype =
0}}}
        not_first_call = <optimized out>
        pagesize_m1 = <optimized out>
        sp = <optimized out>
        freesize = <optimized out>
        __PRETTY_FUNCTION__ = "start_thread"
#36 0x00007f3fc438f82d in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:109

the last thread is runned by a typefind:sink element:

#0  0x00007f3fc43898e9 in syscall () at
../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007f3fc5c7abdf in g_cond_wait (cond=cond at entry=0x7f3f1c04e0b0,
mutex=mutex at entry=0x7f3f1c04e068)
    at /build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gthread-posix.c:1394
        sampled = 1
#2  0x00007f3fc61f10cd in gst_task_func (task=0x7f3f1c04e050 [GstTask]) at
gsttask.c:317
        lock = 0x7f3f9c0ce550
        tself = 0x7f3f7409a0f0
        priv = 0x7f3f1c04e000
        __PRETTY_FUNCTION__ = "gst_task_func"
#3  0x00007f3fc5c5d54e in g_thread_pool_thread_proxy (data=<optimized out>)
at /build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gthreadpool.c:307
        task = 0x7f3f7c0054b0
        pool = 0x18c8e00
#4  0x00007f3fc5c5cbb5 in g_thread_proxy (data=0x7f3f7409a0f0) at
/build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gthread.c:780
        thread = 0x7f3f7409a0f0
#5  0x00007f3fc4efa6ba in start_thread (arg=0x7f3f02376700) at
pthread_create.c:333
        __res = <optimized out>
        pd = 0x7f3f02376700
        now = <optimized out>
        unwind_buf = 
              {cancel_jmp_buf = {{jmp_buf = {139908596852480,
4465231497355108243, 0, 139908634608223, 8388608, 139909365050352,
-4356753195872247917, -4357169156185481325}, mask_was_saved = 0}}, priv =
{pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype =
0}}}
        not_first_call = <optimized out>
        pagesize_m1 = <optimized out>
        sp = <optimized out>
        freesize = <optimized out>
        __PRETTY_FUNCTION__ = "start_thread"
#6  0x00007f3fc438f82d in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:109

anyone has any idea on which this happens?

kind regards,
henning



--
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/gst-element-set-state-deadlock-tp4682492.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.


More information about the gstreamer-devel mailing list