urisourcebin: deadlock between object and state lock
@bilboed : I found another deadlock while working on gst-plugins-rs#268 (closed)
It can be reproduced using the same tool as #3297 (closed) but may need a few runs before occurring.
Thread 12 (Thread 0x7f5b38c006c0 (LWP 1229305) "typefindelement"):
#0 0x00007f5b4a242fc0 in __lll_lock_wait () at /lib64/libc.so.6
#1 0x00007f5b4a2494da in pthread_mutex_lock@@GLIBC_2.2.5 () at /lib64/libc.so.6
#2 0x00007f5b49df21a6 in setup_parsebin_for_slot (info=0x7f5b4405a9e0, originating_pad=0x558ea01747f0) at ../subprojects/gst-plugins-base/gst/playback/gsturisourcebin.c:1953
#3 0x00007f5b49df2b88 in handle_new_pad (info=0x7f5b4405a9e0, srcpad=0x558ea01747f0, caps=0x7f5adc008240) at ../subprojects/gst-plugins-base/gst/playback/gsturisourcebin.c:2110
#4 0x00007f5b49df30d0 in type_found (typefind=0x558ea01799f0, probability=100, caps=0x7f5adc008240, info=0x7f5b4405a9e0) at ../subprojects/gst-plugins-base/gst/playback/gsturisourcebin.c:2193
#5 0x00007f5b4a1b6a06 in ffi_call_unix64 () at /lib64/libffi.so.8
#6 0x00007f5b4a1b349d in ffi_call_int.lto_priv () at /lib64/libffi.so.8
#7 0x00007f5b4a1b6083 in ffi_call () at /lib64/libffi.so.8
#8 0x00007f5b4a94c113 in g_cclosure_marshal_generic () at /lib64/libgobject-2.0.so.0
#9 0x00007f5b4a946060 in g_closure_invoke () at /lib64/libgobject-2.0.so.0
#10 0x00007f5b4a972f66 in signal_emit_unlocked_R.isra.0 () at /lib64/libgobject-2.0.so.0
#11 0x00007f5b4a9634da in g_signal_emit_valist () at /lib64/libgobject-2.0.so.0
#12 0x00007f5b4a9636f3 in g_signal_emit () at /lib64/libgobject-2.0.so.0
#13 0x00007f5b499c66dd in gst_type_find_element_emit_have_type (typefind=0x558ea01799f0, probability=100, caps=0x7f5adc008240) at ../subprojects/gstreamer/plugins/elements/gsttypefindelement.c:239
#14 0x00007f5b499c9b9d in gst_type_find_element_loop (pad=0x558ea0174a40) at ../subprojects/gstreamer/plugins/elements/gsttypefindelement.c:1195
#15 0x00007f5b4a58c1ee in gst_task_func (task=0x558ea01e4050) at ../subprojects/gstreamer/gst/gsttask.c:399
#16 0x00007f5b4a58d5f9 in default_func (tdata=0x7f5b4402c430, pool=0x558ea00ac020) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#17 0x00007f5b4a6aa052 in g_thread_pool_thread_proxy.lto_priv () at /lib64/libglib-2.0.so.0
#18 0x00007f5b4a6a6f22 in g_thread_proxy () at /lib64/libglib-2.0.so.0
#19 0x00007f5b4a24619d in start_thread () at /lib64/libc.so.6
#20 0x00007f5b4a2c7c60 in clone3 () at /lib64/libc.so.6
Thread 11 (Thread 0x7f5b396006c0 (LWP 1229304) "pool-test-gst"):
#0 0x00007f5b4a2bf9cd in syscall () at /lib64/libc.so.6
#1 0x00007f5b4a6c7420 in g_cond_wait_until () at /lib64/libglib-2.0.so.0
#2 0x00007f5b4a647451 in g_async_queue_pop_intern_unlocked () at /lib64/libglib-2.0.so.0
#3 0x00007f5b4a6475e5 in g_async_queue_timeout_pop () at /lib64/libglib-2.0.so.0
#4 0x00007f5b4a6a9f05 in g_thread_pool_thread_proxy.lto_priv () at /lib64/libglib-2.0.so.0
#5 0x00007f5b4a6a6f22 in g_thread_proxy () at /lib64/libglib-2.0.so.0
#6 0x00007f5b4a24619d in start_thread () at /lib64/libc.so.6
#7 0x00007f5b4a2c7c60 in clone3 () at /lib64/libc.so.6
Thread 10 (Thread 0x7f5b3be006c0 (LWP 1229300) "queue1:src"):
#0 0x00007f5b4a2bf9cd in syscall () at /lib64/libc.so.6
#1 0x00007f5b4a6c6ea3 in g_cond_wait () at /lib64/libglib-2.0.so.0
#2 0x00007f5b499bf1fb in gst_queue_loop (pad=0x7f5b1c01caa0) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1572
#3 0x00007f5b4a58c1ee in gst_task_func (task=0x7f5b24012a70) at ../subprojects/gstreamer/gst/gsttask.c:399
#4 0x00007f5b4a58d5f9 in default_func (tdata=0x7f5b14014a40, pool=0x558ea00ac020) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#5 0x00007f5b4a6aa052 in g_thread_pool_thread_proxy.lto_priv () at /lib64/libglib-2.0.so.0
#6 0x00007f5b4a6a6f22 in g_thread_proxy () at /lib64/libglib-2.0.so.0
#7 0x00007f5b4a24619d in start_thread () at /lib64/libc.so.6
#8 0x00007f5b4a2c7c60 in clone3 () at /lib64/libc.so.6
Thread 9 (Thread 0x7f5b40c006c0 (LWP 1229299) "queue0:src"):
#0 0x00007f5b4a2bf9cd in syscall () at /lib64/libc.so.6
#1 0x00007f5b4a6c6ea3 in g_cond_wait () at /lib64/libglib-2.0.so.0
#2 0x00007f5b499bf1fb in gst_queue_loop (pad=0x7f5b2c015630) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1572
#3 0x00007f5b4a58c1ee in gst_task_func (task=0x7f5b240124d0) at ../subprojects/gstreamer/gst/gsttask.c:399
#4 0x00007f5b4a58d5f9 in default_func (tdata=0x7f5b1c012900, pool=0x558ea00ac020) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#5 0x00007f5b4a6aa052 in g_thread_pool_thread_proxy.lto_priv () at /lib64/libglib-2.0.so.0
#6 0x00007f5b4a6a6f22 in g_thread_proxy () at /lib64/libglib-2.0.so.0
#7 0x00007f5b4a24619d in start_thread () at /lib64/libc.so.6
#8 0x00007f5b4a2c7c60 in clone3 () at /lib64/libc.so.6
Thread 8 (Thread 0x7f5b416006c0 (LWP 1229298) "multiqueue0:src"):
#0 0x00007f5b4a2bf9cd in syscall () at /lib64/libc.so.6
#1 0x00007f5b4a6c6ea3 in g_cond_wait () at /lib64/libglib-2.0.so.0
#2 0x00007f5b49b81dca in _gst_data_queue_wait_non_empty (queue=0x7f5b2c007ec0) at ../subprojects/gstreamer/libs/gst/base/gstdataqueue.c:554
#3 0x00007f5b49b821f8 in gst_data_queue_pop (queue=0x7f5b2c007ec0, item=0x7f5b415ffc08) at ../subprojects/gstreamer/libs/gst/base/gstdataqueue.c:596
#4 0x00007f5b4999e3bc in gst_multi_queue_loop (pad=0x7f5b2c014cf0) at ../subprojects/gstreamer/plugins/elements/gstmultiqueue.c:2190
#5 0x00007f5b4a58c1ee in gst_task_func (task=0x7f5b3c06acb0) at ../subprojects/gstreamer/gst/gsttask.c:399
#6 0x00007f5b4a58d5f9 in default_func (tdata=0x7f5b2400e400, pool=0x558ea00ac020) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#7 0x00007f5b4a6aa052 in g_thread_pool_thread_proxy.lto_priv () at /lib64/libglib-2.0.so.0
#8 0x00007f5b4a6a6f22 in g_thread_proxy () at /lib64/libglib-2.0.so.0
#9 0x00007f5b4a24619d in start_thread () at /lib64/libc.so.6
#10 0x00007f5b4a2c7c60 in clone3 () at /lib64/libc.so.6
Thread 7 (Thread 0x7f5b420006c0 (LWP 1229297) "multiqueue0:src"):
--Type <RET> for more, q to quit, c to continue without paging--c
#0 0x00007f5b4a2bf9cd in syscall () at /lib64/libc.so.6
#1 0x00007f5b4a6c6ea3 in g_cond_wait () at /lib64/libglib-2.0.so.0
#2 0x00007f5b49b81dca in _gst_data_queue_wait_non_empty (queue=0x7f5b2c0078c0) at ../subprojects/gstreamer/libs/gst/base/gstdataqueue.c:554
#3 0x00007f5b49b821f8 in gst_data_queue_pop (queue=0x7f5b2c0078c0, item=0x7f5b41fffc08) at ../subprojects/gstreamer/libs/gst/base/gstdataqueue.c:596
#4 0x00007f5b4999e3bc in gst_multi_queue_loop (pad=0x7f5b2c0143b0) at ../subprojects/gstreamer/plugins/elements/gstmultiqueue.c:2190
#5 0x00007f5b4a58c1ee in gst_task_func (task=0x7f5b3c06a710) at ../subprojects/gstreamer/gst/gsttask.c:399
#6 0x00007f5b4a58d5f9 in default_func (tdata=0x7f5b2c0131d0, pool=0x558ea00ac020) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#7 0x00007f5b4a6aa052 in g_thread_pool_thread_proxy.lto_priv () at /lib64/libglib-2.0.so.0
#8 0x00007f5b4a6a6f22 in g_thread_proxy () at /lib64/libglib-2.0.so.0
#9 0x00007f5b4a24619d in start_thread () at /lib64/libc.so.6
#10 0x00007f5b4a2c7c60 in clone3 () at /lib64/libc.so.6
Thread 6 (Thread 0x7f5b42a006c0 (LWP 1229296) "typefind:sink"):
#0 0x00007f5b4a2bf9cd in syscall () at /lib64/libc.so.6
#1 0x00007f5b4a6c6ea3 in g_cond_wait () at /lib64/libglib-2.0.so.0
#2 0x00007f5b4a58c10e in gst_task_func (task=0x7f5b3c06a950) at ../subprojects/gstreamer/gst/gsttask.c:384
#3 0x00007f5b4a58d5f9 in default_func (tdata=0x7f5b2c01e840, pool=0x558ea00ac020) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#4 0x00007f5b4a6aa052 in g_thread_pool_thread_proxy.lto_priv () at /lib64/libglib-2.0.so.0
#5 0x00007f5b4a6a6f22 in g_thread_proxy () at /lib64/libglib-2.0.so.0
#6 0x00007f5b4a24619d in start_thread () at /lib64/libc.so.6
#7 0x00007f5b4a2c7c60 in clone3 () at /lib64/libc.so.6
Thread 5 (Thread 0x7f5b434006c0 (LWP 1229295) "typefindelement"):
#0 0x00007f5b4a2bf9cd in syscall () at /lib64/libc.so.6
#1 0x00007f5b4a6c6ea3 in g_cond_wait () at /lib64/libglib-2.0.so.0
#2 0x00007f5b4a58c10e in gst_task_func (task=0x7f5afc00acb0) at ../subprojects/gstreamer/gst/gsttask.c:384
#3 0x00007f5b4a58d5f9 in default_func (tdata=0x7f5aec016eb0, pool=0x558ea00ac020) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#4 0x00007f5b4a6aa052 in g_thread_pool_thread_proxy.lto_priv () at /lib64/libglib-2.0.so.0
#5 0x00007f5b4a6a6f22 in g_thread_proxy () at /lib64/libglib-2.0.so.0
#6 0x00007f5b4a24619d in start_thread () at /lib64/libc.so.6
#7 0x00007f5b4a2c7c60 in clone3 () at /lib64/libc.so.6
Thread 4 (Thread 0x7f5b43e006c0 (LWP 1229294) "multiqueue3:src"):
#0 0x00007f5b4a2bf9cd in syscall () at /lib64/libc.so.6
#1 0x00007f5b4a6c6e1c in g_mutex_lock_slowpath () at /lib64/libglib-2.0.so.0
#2 0x00007f5b49de8986 in uri_src_probe (pad=0x558ea01deef0, info=0x7f5b43dff4b0, srcpad=0x7f5b44031c10) at ../subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c:1248
#3 0x00007f5b4a548970 in probe_hook_marshal (hook=0x7f5b44032e00, data=0x7f5b43dff440) at ../subprojects/gstreamer/gst/gstpad.c:3695
#4 0x00007f5b4a65da3e in g_hook_list_marshal () at /lib64/libglib-2.0.so.0
#5 0x00007f5b4a549084 in do_probe_callbacks (pad=0x558ea01deef0, info=0x7f5b43dff4b0, defaultval=GST_FLOW_OK) at ../subprojects/gstreamer/gst/gstpad.c:3879
#6 0x00007f5b4a550101 in gst_pad_push_event_unchecked (pad=0x558ea01deef0, event=0x7f5b44065b90, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at ../subprojects/gstreamer/gst/gstpad.c:5569
#7 0x00007f5b4a549a88 in push_sticky (pad=0x558ea01deef0, ev=0x7f5b43dff5e0, user_data=0x7f5b43dff640) at ../subprojects/gstreamer/gst/gstpad.c:4083
#8 0x00007f5b4a53efc4 in events_foreach (pad=0x558ea01deef0, func=0x7f5b4a549954 <push_sticky>, user_data=0x7f5b43dff640) at ../subprojects/gstreamer/gst/gstpad.c:613
#9 0x00007f5b4a549e57 in check_sticky (pad=0x558ea01deef0, event=0x7f5b44065b90) at ../subprojects/gstreamer/gst/gstpad.c:4142
#10 0x00007f5b4a550ac3 in gst_pad_push_event (pad=0x558ea01deef0, event=0x7f5b44065b90) at ../subprojects/gstreamer/gst/gstpad.c:5737
#11 0x00007f5b4a5472ad in event_forward_func (pad=0x558ea01deef0, data=0x7f5b43dff7e0) at ../subprojects/gstreamer/gst/gstpad.c:3156
#12 0x00007f5b4a5470a9 in gst_pad_forward (pad=0x7f5b2c020360, forward=0x7f5b4a547183 <event_forward_func>, user_data=0x7f5b43dff7e0) at ../subprojects/gstreamer/gst/gstpad.c:3110
#13 0x00007f5b4a547471 in gst_pad_event_default (pad=0x7f5b2c020360, parent=0x558ea01deef0, event=0x7f5b44065b90) at ../subprojects/gstreamer/gst/gstpad.c:3207
#14 0x00007f5b4a551988 in gst_pad_send_event_unchecked (pad=0x7f5b2c020360, event=0x7f5b44065b90, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at ../subprojects/gstreamer/gst/gstpad.c:5971
#15 0x00007f5b4a5502ca in gst_pad_push_event_unchecked (pad=0x7f5b440602d0, event=0x7f5b44065b90, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at ../subprojects/gstreamer/gst/gstpad.c:5604
#16 0x00007f5b4a549a88 in push_sticky (pad=0x7f5b440602d0, ev=0x7f5b43dffa20, user_data=0x7f5b43dffa80) at ../subprojects/gstreamer/gst/gstpad.c:4083
#17 0x00007f5b4a53efc4 in events_foreach (pad=0x7f5b440602d0, func=0x7f5b4a549954 <push_sticky>, user_data=0x7f5b43dffa80) at ../subprojects/gstreamer/gst/gstpad.c:613
#18 0x00007f5b4a549e57 in check_sticky (pad=0x7f5b440602d0, event=0x7f5b44065b90) at ../subprojects/gstreamer/gst/gstpad.c:4142
#19 0x00007f5b4a550ac3 in gst_pad_push_event (pad=0x7f5b440602d0, event=0x7f5b44065b90) at ../subprojects/gstreamer/gst/gstpad.c:5737
#20 0x00007f5b4999df66 in gst_single_queue_push_one (mq=0x7f5aec02f540, sq=0x7f5b4405eb20, object=0x7f5b44065b90, allow_drop=0x7f5b43dffbfc) at ../subprojects/gstreamer/plugins/elements/gstmultiqueue.c:2066
#21 0x00007f5b4999f83b in gst_multi_queue_loop (pad=0x7f5b440602d0) at ../subprojects/gstreamer/plugins/elements/gstmultiqueue.c:2345
#22 0x00007f5b4a58c1ee in gst_task_func (task=0x558ea01e4950) at ../subprojects/gstreamer/gst/gsttask.c:399
#23 0x00007f5b4a58d5f9 in default_func (tdata=0x7f5b440507c0, pool=0x558ea00ac020) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#24 0x00007f5b4a6aa052 in g_thread_pool_thread_proxy.lto_priv () at /lib64/libglib-2.0.so.0
#25 0x00007f5b4a6a6f22 in g_thread_proxy () at /lib64/libglib-2.0.so.0
#26 0x00007f5b4a24619d in start_thread () at /lib64/libc.so.6
#27 0x00007f5b4a2c7c60 in clone3 () at /lib64/libc.so.6
Thread 3 (Thread 0x7f5b48e006c0 (LWP 1229293) "multiqueue3:src"):
#0 0x00007f5b4a2bf9cd in syscall () at /lib64/libc.so.6
#1 0x00007f5b4a6c6ea3 in g_cond_wait () at /lib64/libglib-2.0.so.0
#2 0x00007f5b49b81dca in _gst_data_queue_wait_non_empty (queue=0x558ea00b5470) at ../subprojects/gstreamer/libs/gst/base/gstdataqueue.c:554
#3 0x00007f5b49b821f8 in gst_data_queue_pop (queue=0x558ea00b5470, item=0x7f5b48dffc08) at ../subprojects/gstreamer/libs/gst/base/gstdataqueue.c:596
#4 0x00007f5b4999e3bc in gst_multi_queue_loop (pad=0x7f5aec033ce0) at ../subprojects/gstreamer/plugins/elements/gstmultiqueue.c:2190
#5 0x00007f5b4a58c1ee in gst_task_func (task=0x558ea01e4830) at ../subprojects/gstreamer/gst/gsttask.c:399
#6 0x00007f5b4a58d5f9 in default_func (tdata=0x7f5b4404fe20, pool=0x558ea00ac020) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#7 0x00007f5b4a6aa052 in g_thread_pool_thread_proxy.lto_priv () at /lib64/libglib-2.0.so.0
#8 0x00007f5b4a6a6f22 in g_thread_proxy () at /lib64/libglib-2.0.so.0
#9 0x00007f5b4a24619d in start_thread () at /lib64/libc.so.6
#10 0x00007f5b4a2c7c60 in clone3 () at /lib64/libc.so.6
Thread 2 (Thread 0x7f5b498006c0 (LWP 1229292) "matroskademux2:"):
#0 0x00007f5b4a2bf9cd in syscall () at /lib64/libc.so.6
#1 0x00007f5b4a6c6e1c in g_mutex_lock_slowpath () at /lib64/libglib-2.0.so.0
#2 0x00007f5b49df6488 in gst_uri_source_bin_change_state (element=0x558ea01755b0, transition=GST_STATE_CHANGE_READY_TO_PAUSED) at ../subprojects/gst-plugins-base/gst/playback/gsturisourcebin.c:3097
#3 0x00007f5b4a51ad8f in gst_element_change_state (element=0x558ea01755b0, transition=GST_STATE_CHANGE_READY_TO_PAUSED) at ../subprojects/gstreamer/gst/gstelement.c:3101
#4 0x00007f5b4a51a2ab in gst_element_continue_state (element=0x558ea01755b0, ret=GST_STATE_CHANGE_SUCCESS) at ../subprojects/gstreamer/gst/gstelement.c:2809
#5 0x00007f5b4a51b0c8 in gst_element_change_state (element=0x558ea01755b0, transition=GST_STATE_CHANGE_NULL_TO_READY) at ../subprojects/gstreamer/gst/gstelement.c:3140
#6 0x00007f5b4a51ab14 in gst_element_set_state_func (element=0x558ea01755b0, state=GST_STATE_PLAYING) at ../subprojects/gstreamer/gst/gstelement.c:3055
#7 0x00007f5b4a51a6ff in gst_element_set_state (element=0x558ea01755b0, state=GST_STATE_PLAYING) at ../subprojects/gstreamer/gst/gstelement.c:2956
#8 0x00007f5b4a519577 in gst_element_sync_state_with_parent (element=0x558ea01755b0) at ../subprojects/gstreamer/gst/gstelement.c:2473
#9 0x00007f5b49de7610 in activate_source_item (item=0x7f5b44050430) at ../subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c:964
#10 0x00007f5b49deb5e1 in assign_handlers_to_item (dec=0x558ea01740e0, item=0x7f5b4405b3f0) at ../subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c:2014
#11 0x00007f5b49deb6ad in activate_play_item (item=0x7f5b4405b3f0) at ../subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c:2033
#12 0x00007f5b49deb36c in gst_uri_decode_bin3_set_uri (dec=0x558ea01740e0, uri=0x7f5b440631c0 "file:///var/home/cassidy/dev/test-gst/sample.mkv") at ../subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c:1974
#13 0x00007f5b49dea14f in gst_uri_decode_bin3_set_property (object=0x558ea01740e0, prop_id=1, value=0x7f5b497fe678, pspec=0x558e9fd62b10) at ../subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c:1588
#14 0x00007f5b4a95573d in object_set_property () at /lib64/libgobject-2.0.so.0
#15 0x00007f5b4a9585df in g_object_setv () at /lib64/libgobject-2.0.so.0
#16 0x00007f5b4a95877f in g_object_set_property () at /lib64/libgobject-2.0.so.0
#17 0x0000558e9e0f1128 in glib::object::{impl#32}::set_property<gstreamer::auto::element::Element, &alloc::string::String> (self=0x7f5b497fe708, property_name=..., value=0x558e9fff8240) at /var/home/cassidy/.cargo/registry/src/index.crates.io-6f17d22bba15001f/glib-0.19.2/src/object.rs:2239
#18 0x0000558e9e0f3f49 in test_gst::main::{closure#1} (args=...) at src/main.rs:60
#19 0x0000558e9e0eb7b8 in glib::object::{impl#32}::connect_unsafe_id::{closure#0}<gstreamer::auto::element::Element, test_gst::main::{closure_env#1}> (values=...) at /var/home/cassidy/.cargo/registry/src/index.crates.io-6f17d22bba15001f/glib-0.19.2/src/object.rs:2578
#20 0x0000558e9e0eda38 in glib::closure::{impl#4}::new_unsafe::marshal<glib::object::{impl#32}::connect_unsafe_id::{closure_env#0}<gstreamer::auto::element::Element, test_gst::main::{closure_env#1}>> (_closure=0x558ea01b30e0, return_value=0x0, n_param_values=1, param_values=0x7f5b497fedf0, _invocation_hint=0x7f5b497fed70, marshal_data=0x558e9fff8240) at /var/home/cassidy/.cargo/registry/src/index.crates.io-6f17d22bba15001f/glib-0.19.2/src/closure.rs:230
#21 0x00007f5b4a946060 in g_closure_invoke () at /lib64/libgobject-2.0.so.0
#22 0x00007f5b4a972f66 in signal_emit_unlocked_R.isra.0 () at /lib64/libgobject-2.0.so.0
#23 0x00007f5b4a9634da in g_signal_emit_valist () at /lib64/libgobject-2.0.so.0
#24 0x00007f5b4a9636f3 in g_signal_emit () at /lib64/libgobject-2.0.so.0
#25 0x00007f5b49de70e7 in emit_and_handle_about_to_finish (uridecodebin=0x558ea01740e0, item=0x7f5aec026380) at ../subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c:869
#26 0x00007f5b49de9d57 in src_about_to_finish_cb (element=0x7f5aec032350, handler=0x7f5aec03a6c0) at ../subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c:1508
#27 0x00007f5b4a963614 in g_signal_emit_valist () at /lib64/libgobject-2.0.so.0
#28 0x00007f5b4a9636f3 in g_signal_emit () at /lib64/libgobject-2.0.so.0
#29 0x00007f5b49dee2ec in demux_pad_events (pad=0x7f5af400ba90, info=0x7f5b497ff520, slot=0x7f5b440363d0) at ../subprojects/gst-plugins-base/gst/playback/gsturisourcebin.c:895
#30 0x00007f5b4a548970 in probe_hook_marshal (hook=0x7f5b44032d00, data=0x7f5b497ff4b0) at ../subprojects/gstreamer/gst/gstpad.c:3695
#31 0x00007f5b4a65da3e in g_hook_list_marshal () at /lib64/libglib-2.0.so.0
#32 0x00007f5b4a549084 in do_probe_callbacks (pad=0x7f5af400ba90, info=0x7f5b497ff520, defaultval=GST_FLOW_OK) at ../subprojects/gstreamer/gst/gstpad.c:3879
#33 0x00007f5b4a550101 in gst_pad_push_event_unchecked (pad=0x7f5af400ba90, event=0x7f5b44065b90, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at ../subprojects/gstreamer/gst/gstpad.c:5569
#34 0x00007f5b4a549a88 in push_sticky (pad=0x7f5af400ba90, ev=0x7f5b497ff650, user_data=0x7f5b497ff6b0) at ../subprojects/gstreamer/gst/gstpad.c:4083
#35 0x00007f5b4a53efc4 in events_foreach (pad=0x7f5af400ba90, func=0x7f5b4a549954 <push_sticky>, user_data=0x7f5b497ff6b0) at ../subprojects/gstreamer/gst/gstpad.c:613
#36 0x00007f5b4a549e57 in check_sticky (pad=0x7f5af400ba90, event=0x7f5b44065b90) at ../subprojects/gstreamer/gst/gstpad.c:4142
#37 0x00007f5b4a550ac3 in gst_pad_push_event (pad=0x7f5af400ba90, event=0x7f5b44065b90) at ../subprojects/gstreamer/gst/gstpad.c:5737
#38 0x00007f5b4a5472ad in event_forward_func (pad=0x7f5af400ba90, data=0x7f5b497ff850) at ../subprojects/gstreamer/gst/gstpad.c:3156
#39 0x00007f5b4a5470a9 in gst_pad_forward (pad=0x558ea01e0ec0, forward=0x7f5b4a547183 <event_forward_func>, user_data=0x7f5b497ff850) at ../subprojects/gstreamer/gst/gstpad.c:3110
#40 0x00007f5b4a547471 in gst_pad_event_default (pad=0x558ea01e0ec0, parent=0x7f5af400ba90, event=0x7f5b44065b90) at ../subprojects/gstreamer/gst/gstpad.c:3207
#41 0x00007f5b4a551988 in gst_pad_send_event_unchecked (pad=0x558ea01e0ec0, event=0x7f5b44065b90, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at ../subprojects/gstreamer/gst/gstpad.c:5971
#42 0x00007f5b4a5502ca in gst_pad_push_event_unchecked (pad=0x558ea0175a70, event=0x7f5b44065b90, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at ../subprojects/gstreamer/gst/gstpad.c:5604
#43 0x00007f5b4a549a88 in push_sticky (pad=0x558ea0175a70, ev=0x7f5b497ffa90, user_data=0x7f5b497ffaf0) at ../subprojects/gstreamer/gst/gstpad.c:4083
#44 0x00007f5b4a53efc4 in events_foreach (pad=0x558ea0175a70, func=0x7f5b4a549954 <push_sticky>, user_data=0x7f5b497ffaf0) at ../subprojects/gstreamer/gst/gstpad.c:613
#45 0x00007f5b4a549e57 in check_sticky (pad=0x558ea0175a70, event=0x7f5b44065b90) at ../subprojects/gstreamer/gst/gstpad.c:4142
#46 0x00007f5b4a550ac3 in gst_pad_push_event (pad=0x558ea0175a70, event=0x7f5b44065b90) at ../subprojects/gstreamer/gst/gstpad.c:5737
#47 0x00007f5b498ebd0c in gst_matroska_demux_send_event (demux=0x7f5b24020030, event=0x7f5b44065b90) at ../subprojects/gst-plugins-good/gst/matroska/matroska-demux.c:1972
#48 0x00007f5b498fd545 in gst_matroska_demux_loop (pad=0x7f5aec033150) at ../subprojects/gst-plugins-good/gst/matroska/matroska-demux.c:6126
#49 0x00007f5b4a58c1ee in gst_task_func (task=0x7f5b3c06aef0) at ../subprojects/gstreamer/gst/gsttask.c:399
#50 0x00007f5b4a58d5f9 in default_func (tdata=0x7f5b24016200, pool=0x558ea00ac020) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#51 0x00007f5b4a6aa052 in g_thread_pool_thread_proxy.lto_priv () at /lib64/libglib-2.0.so.0
#52 0x00007f5b4a6a6f22 in g_thread_proxy () at /lib64/libglib-2.0.so.0
#53 0x00007f5b4a24619d in start_thread () at /lib64/libc.so.6
#54 0x00007f5b4a2c7c60 in clone3 () at /lib64/libc.so.6
Thread 1 (Thread 0x7f5b49e6c3c0 (LWP 1229289) "test-gst"):
#0 0x00007f5b4a2ba3b6 in ppoll () at /lib64/libc.so.6
#1 0x00007f5b4a5619d4 in gst_poll_wait (set=0x558e9fd58970, timeout=18446744073709551615) at ../subprojects/gstreamer/gst/gstpoll.c:1468
#2 0x00007f5b4a4f86a0 in gst_bus_timed_pop_filtered (bus=0x558e9fff0290, timeout=18446744073709551615, types=GST_MESSAGE_ANY) at ../subprojects/gstreamer/gst/gstbus.c:612
#3 0x00007f5b4a4f885c in gst_bus_timed_pop (bus=0x558e9fff0290, timeout=18446744073709551615) at ../subprojects/gstreamer/gst/gstbus.c:651
#4 0x0000558e9e1078c4 in gstreamer::auto::bus::Bus::timed_pop<core::option::Option<gstreamer::format::clock_time::ClockTime>> (self=0x7ffdb7583fc8, timeout=...) at src/auto/bus.rs:120
#5 0x0000558e9e107989 in gstreamer::bus::{impl#1}::next (self=0x7ffdb7584008) at src/bus.rs:333
#6 0x0000558e9e0f6f17 in test_gst::main () at src/main.rs:71
#7 0x0000558e9e0ef72b in core::ops::function::FnOnce::call_once<fn() -> core::result::Result<(), anyhow::Error>, ()> () at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:250
#8 0x0000558e9e0eccfe in std::sys_common::backtrace::__rust_begin_short_backtrace<fn() -> core::result::Result<(), anyhow::Error>, core::result::Result<(), anyhow::Error>> (f=0x558e9e0f6620 <test_gst::main>) at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:155
#9 0x0000558e9e0f8551 in std::rt::lang_start::{closure#0}<core::result::Result<(), anyhow::Error>> () at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/rt.rs:166
#10 0x0000558e9e1435f1 in core::ops::function::impls::{impl#2}::call_once<(), (dyn core::ops::function::Fn<(), Output=i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe)> () at library/core/src/ops/function.rs:284
#11 std::panicking::try::do_call<&(dyn core::ops::function::Fn<(), Output=i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe), i32> () at library/std/src/panicking.rs:552
#12 std::panicking::try<i32, &(dyn core::ops::function::Fn<(), Output=i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe)> () at library/std/src/panicking.rs:516
#13 std::panic::catch_unwind<&(dyn core::ops::function::Fn<(), Output=i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe), i32> () at library/std/src/panic.rs:142
#14 std::rt::lang_start_internal::{closure#2} () at library/std/src/rt.rs:148
#15 std::panicking::try::do_call<std::rt::lang_start_internal::{closure_env#2}, isize> () at library/std/src/panicking.rs:552
#16 std::panicking::try<isize, std::rt::lang_start_internal::{closure_env#2}> () at library/std/src/panicking.rs:516
#17 std::panic::catch_unwind<std::rt::lang_start_internal::{closure_env#2}, isize> () at library/std/src/panic.rs:142
#18 std::rt::lang_start_internal () at library/std/src/rt.rs:148
#19 0x0000558e9e0f852a in std::rt::lang_start<core::result::Result<(), anyhow::Error>> (main=0x558e9e0f6620 <test_gst::main>, argc=2, argv=0x7ffdb7584608, sigpipe=0) at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/rt.rs:165
#20 0x0000558e9e0f772e in main ()
#21 0x00007f5b4a1e2550 in __libc_start_call_main () at /lib64/libc.so.6
#22 0x00007f5b4a1e2609 in __libc_start_main_impl () at /lib64/libc.so.6
#23 0x0000558e9e0e9d55 in _start ()
Thread 12:
- holding object lock
- waiting on state lock
Thread 2:
- holding state lock
- waiting object lock
I did check using logs that both are using the same urisourcebin
instance as the pointer is missing from thread 12.
A simple easy fix would be to get the state lock before the object lock in setup_parsebin_for_slot()
.