totem crashes on startup (assert !xcb_xlib_unknown_req_in_deq) (patch method included)
Totem crashes (most of the time) when opening a video file. When it does crash, it crashes before playing the video at all.
Crash confirmed on totem master f4c08d43 Fri Dec 23 14:12:55 2022 +0000
[xcb] Unknown sequence number while processing reply
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
totem: ../../src/xcb_io.c:730: _XReply: Assertion `!xcb_xlib_threads_sequence_lost' failed.
Aborted (core dumped)
Relevant Ubuntu 22.10 bug: https://bugs.launchpad.net/ubuntu/+source/totem/+bug/2000409
The bug doesn't like to happen when running under gdb, so I've just been relying on the stack trace provided by Ubuntu apport for its totem package.
A similar issue happened in SDL, where XInitThreads was supposed to be called but wasn't called early enough, specifically by the NVIDIA libGL implementation which I also happen to be using.
https://github.com/libsdl-org/SDL-1.2/issues/753
- The commits that cause the problem to happen appear to be the following. (Reverting these fixes this issue for me.)
commit 140d9eea70c3101ef3234abb4de5974cb84b13db
Author: Bastien Nocera <hadess@hadess.net>
Date: Wed May 4 11:38:02 2022 +0200
main: Rely on libX11 initialising threads
commit 2610b4536f73493587e4a5a38e01c9961fcabb96
Author: Bastien Nocera <hadess@hadess.net>
Date: Wed May 4 11:37:37 2022 +0200
backend: Rely on libX11 initialising threads
Although they were definitely made with good intention, unfortunately they don't play well with the current state of NVIDIA libGL and cause an immediate crash. For now, I've settled on calling XInitThreads in totem again. But it would be better to solve the race condition that calls XInitThreads to be called too late. It seems like this would be happening for anyone using the NVIDIA proprietary driver, but I am not certain on what exact conditions cause this. Eventually the path forward would be not to revert these, but perhaps it's better to call XInitThreads just in case until we're certain libGL implementations from the major vendors don't have this issue.