player: Deadlock in uri-loaded signal when no signal dispatcher is supplied to GstPlayer
I'm actually not entirely sure it's a bug, one could argue it's an application-side issue, but here it goes. Attaching a test-case.
(gdb) t a a bt
Thread 2 (Thread 0x7ffff7414700 (LWP 20949)):
#0 0x00007ffff7ab2f59 in syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007ffff7c3a62c in g_mutex_lock_slowpath (mutex=mutex@entry=0x5555557c6088) at ../../../glib/gthread-posix.c:1320
#2 0x00007ffff7c3ae82 in g_mutex_lock (mutex=mutex@entry=0x5555557c6088) at ../../../glib/gthread-posix.c:1344
#3 0x00007ffff7f71f8e in gst_player_pause (self=0x5555557c6000 [GstPlayer]) at gstplayer.c:3190
#4 0x000055555555520d in uri_loaded_cb (player=0x5555557c6000 [GstPlayer], uri=0x7ffff001d0d0 "file:///home/phil/Videos/Agent 327.mp4", user_data=0x0) at /home/phil/player-deadlock.c:8
#8 0x00007ffff7cef97f in <emit signal ??? on instance 0x5555557c6000 [GstPlayer]> (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../../../gobject/gsignal.c:3447
#5 0x00007ffff7cd2c8d in g_closure_invoke (closure=0x5555557c8b90, return_value=0x0, n_param_values=2, param_values=0x7ffff7413aa0, invocation_hint=0x7ffff7413a20) at ../../../gobject/gclosure.c:810
#6 0x00007ffff7ce6365 in signal_emit_unlocked_R (node=node@entry=0x55555558a300, detail=detail@entry=0, instance=instance@entry=0x5555557c6000, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffff7413aa0) at ../../../gobject/gsignal.c:3635
#7 0x00007ffff7cef2be in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffff7413c70) at ../../../gobject/gsignal.c:3391
#9 0x00007ffff7f7900d in gst_player_signal_dispatcher_dispatch (self=<optimized out>, player=<optimized out>, emitter=0x7ffff7f6f3b0 <uri_loaded_dispatch>, data=0x7ffff0002040, destroy=0x7ffff7f6f200 <uri_loaded_signal_data_free>) at gstplayer-signal-dispatcher.c:46
#10 0x00007ffff7f76924 in gst_player_set_uri_internal (user_data=0x5555557c6000) at gstplayer.c:599
#11 0x00007ffff7bf0dd8 in g_main_dispatch (context=0x5555557c5c10) at ../../../glib/gmain.c:3182
#12 0x00007ffff7bf0dd8 in g_main_context_dispatch (context=context@entry=0x5555557c5c10) at ../../../glib/gmain.c:3847
#13 0x00007ffff7bf11c8 in g_main_context_iterate (context=0x5555557c5c10, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:3920
#14 0x00007ffff7bf14c2 in g_main_loop_run (loop=0x5555557c3fd0) at ../../../glib/gmain.c:4116
#15 0x00007ffff7f76378 in gst_player_main (data=0x5555557c6000) at gstplayer.c:2970
#16 0x00007ffff7c19415 in g_thread_proxy (data=0x55555568d540) at ../../../glib/gthread.c:784
#17 0x00007ffff7b87fa3 in start_thread (arg=<optimized out>) at pthread_create.c:486
#18 0x00007ffff7ab84cf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 1 (Thread 0x7ffff7415b80 (LWP 20885)):
#0 0x00007ffff7aad819 in __GI___poll (fds=0x5555557c8ce0, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1 0x00007ffff7bf1136 in g_main_context_poll (priority=<optimized out>, n_fds=1, fds=0x5555557c8ce0, timeout=<optimized out>, context=0x555555565730) at ../../../glib/gmain.c:4221
#2 0x00007ffff7bf1136 in g_main_context_iterate (context=0x555555565730, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:3915
#3 0x00007ffff7bf14c2 in g_main_loop_run (loop=0x555555566930) at ../../../glib/gmain.c:4116
#4 0x00005555555552bd in main (argc=2, argv=0x7fffffffe558) at /home/phil/player-deadlock.c:22