From 8106ae7923a4a94949435b65aca0aad303215432 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Sun, 20 Aug 2017 12:14:12 +0200 Subject: [PATCH] i3bar: Bugfix: avoid freeze after VisibilityNotify fixes #2790 --- i3bar/src/xcb.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/i3bar/src/xcb.c b/i3bar/src/xcb.c index 3bd5677a..2ba446b1 100644 --- a/i3bar/src/xcb.c +++ b/i3bar/src/xcb.c @@ -1255,6 +1255,12 @@ char *init_xcb_early() { ev_prepare_init(xcb_prep, &xcb_prep_cb); ev_check_init(xcb_chk, &xcb_chk_cb); + /* Within an event loop iteration, run the xcb_chk watcher last: other + * watchers might call xcb_flush(), which, unexpectedly, can also read + * events into the queue (see _xcb_conn_wait). Hence, we need to drain xcb’s + * queue last, otherwise we risk dead-locking. */ + ev_set_priority(xcb_chk, EV_MINPRI); + ev_io_start(main_loop, xcb_io); ev_prepare_start(main_loop, xcb_prep); ev_check_start(main_loop, xcb_chk);