Deadlock using vaapi on GTK3 GL
Using the current totem and totem development Flatpaks, totem hangs when switching from one file to the next.
#0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007fffe0e14e8a in futex_wait () at /usr/lib/x86_64-linux-gnu/GL/default/lib/libEGL_mesa.so.0
#2 0x00007fffe0df13f7 in _eglLockDisplay () at /usr/lib/x86_64-linux-gnu/GL/default/lib/libEGL_mesa.so.0
#3 0x00007fffe0df5d7d in eglSwapBuffersWithDamageEXT () at /usr/lib/x86_64-linux-gnu/GL/default/lib/libEGL_mesa.so.0
#4 0x00007ffff6c8aa91 in gdk_wayland_gl_context_end_frame (context=<optimized out>, painted=<optimized out>, damage=<optimized out>) at ../gdk/wayland/gdkglcontext-wayland.c:253
#5 0x00007ffff6c6c1d2 in gdk_window_end_paint_internal (window=window@entry=0x7fffe403f3b0 [GdkWaylandWindow]) at ../gdk/gdkwindow.c:3072
#6 0x00007ffff6c6c318 in gdk_window_end_draw_frame (window=0x7fffe403f3b0 [GdkWaylandWindow], context=0x7fffe4056e90 [GdkDrawingContext]) at ../gdk/gdkwindow.c:3311
#7 0x00007ffff7614977 in gtk_main_do_event (event=0x7fffffffcd30) at ../gtk/gtkmain.c:1844
#8 gtk_main_do_event (event=<optimized out>) at ../gtk/gtkmain.c:1691
#9 0x00007ffff6c51bc1 in _gdk_event_emit (event=event@entry=0x7fffffffcd30) at ../gdk/gdkevents.c:73
#10 0x00007ffff6c61b39 in _gdk_window_process_updates_recurse_helper (window=0x7fffe403f3b0 [GdkWaylandWindow], expose_region=<optimized out>) at ../gdk/gdkwindow.c:3874
#11 0x00007ffff6c637f2 in gdk_window_process_updates_internal (window=0x7fffe403f3b0 [GdkWaylandWindow]) at ../gdk/gdkwindow.c:4020
#12 0x00007ffff6c639ed in gdk_window_process_updates_with_mode (window=<optimized out>, recurse_mode=<optimized out>) at ../gdk/gdkwindow.c:4215
#13 0x00007ffff7ee370a in _g_closure_invoke_va (closure=closure@entry=0x555555c85d40, return_value=return_value@entry=0x0, instance=instance@entry=0x555555a7c280, args=args@entry=0x7fffffffd040, n_params=0, param_types=0x0) at ../gobject/gclosure.c:895
#14 0x00007ffff7eff15f in g_signal_emit_valist (instance=0x555555a7c280, signal_id=98, detail=<optimized out>, var_args=var_args@entry=0x7fffffffd040) at ../gobject/gsignal.c:3456
#15 0x00007ffff7eff363 in g_signal_emit (instance=instance@entry=0x555555a7c280, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3606
#16 0x00007ffff6c5ab13 in _gdk_frame_clock_emit_paint (frame_clock=frame_clock@entry=0x555555a7c280 [GdkFrameClockIdle]) at ../gdk/gdkframeclock.c:657
#17 0x00007ffff6c5b7c5 in gdk_frame_clock_paint_idle (data=0x555555a7c280) at ../gdk/gdkframeclockidle.c:597
#18 0x00007ffff6c462fd in gdk_threads_dispatch (data=0x555555971580, data@entry=<error reading variable: value has been optimized out>) at ../gdk/gdk.c:769
#19 0x00007ffff7de637f in g_timeout_dispatch (source=0x5555557fbb60, callback=<optimized out>, user_data=<optimized out>) at ../glib/gmain.c:5017
#20 0x00007ffff7de5681 in g_main_dispatch (context=<optimized out>) at ../glib/gmain.c:3454
#21 g_main_context_dispatch (context=<optimized out>) at ../glib/gmain.c:4172
#22 0x00007ffff7de5bd8 in g_main_context_iterate (context=context@entry=0x5555555b7db0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4248
#23 0x00007ffff7de5c73 in g_main_context_iteration (context=context@entry=0x5555555b7db0, may_block=may_block@entry=1) at ../glib/gmain.c:4313
#24 0x00007ffff72ffd1d in g_application_run (application=0x5555555b4100 [TotemObject], argc=<optimized out>, argv=<optimized out>) at ../gio/gapplication.c:2573
#25 0x000055555555637d in main ()
It doesn't always deadlock in the same place, but always when calling _eglLockDisplay().
Disable HW acceleration in totem fixes the problem.
GTK3 3.24.38, GStreamer 1.22.4, Mesa 23.0.2, libva 2.18.0