Previously, we used ev_check watchers, which are executed at the beginning of an event loop iteration. This was problematic if one of the handlers happened to fill the XCB event queue, e.g. by reading a reply from X11 and an event happened in the meantime. In that situation, we would hand control to the event loop, entirely ignoring the pending event. This would manifest itself as a 1-minute hang, reproducible (sometimes) in the i3 testsuite. issue #2790 describes an instance of this issue in i3bar, and we fixed that by changing the watcher priority to run last. Handling events in xcb_prepare_cb has the same effect, as ev_prepare watchers are run just before the event loop goes to sleep.
i3: A tiling window manager
i3 is a tiling window manager for X11.
For more information about i3, please see the project's website and online documentation.
For information about contributing to i3, please see CONTRIBUTING.md.
Description
Languages
C
58.6%
Perl
29%
Raku
9.4%
Ruby
1.2%
Shell
0.7%
Other
1.1%