]> git.sur5r.net Git - i3/i3/commit
Move XCB event handling into xcb_prepare_cb. 3028/head
authorMichael Stapelberg <michael@stapelberg.de>
Tue, 3 Oct 2017 08:03:29 +0000 (10:03 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 23 Oct 2017 19:06:13 +0000 (21:06 +0200)
commit0d8b6714e39af81cbd6f4fbad500872a715dea24
treee2b69fbae3ebe140ecb57d1dc209b0ee7ef764d6
parent1946cc6cab72e6e8f23a3a7fb331e82397dd39f2
Move XCB event handling into xcb_prepare_cb.

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.
i3bar/src/xcb.c
src/floating.c
src/main.c
src/restore_layout.c