summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Ian Fan <ianfan0@gmail.com>2018-11-01 23:57:13 +0000
committerLibravatar emersion <contact@emersion.fr>2018-11-24 23:10:05 +0100
commit6358de382793a5e28f445c87bb3baf138f4810af (patch)
tree11d31aea58fa68e83fd57b262510a24bb52a10b5
parentswayidle: when acquiring sleep lock, initialize and free variables properly (diff)
downloadsway-6358de382793a5e28f445c87bb3baf138f4810af.tar.gz
sway-6358de382793a5e28f445c87bb3baf138f4810af.tar.zst
sway-6358de382793a5e28f445c87bb3baf138f4810af.zip
swaylock: fix display_event to not block
-rw-r--r--swayidle/main.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/swayidle/main.c b/swayidle/main.c
index 4e850c92..2e202ce1 100644
--- a/swayidle/main.c
+++ b/swayidle/main.c
@@ -366,15 +366,22 @@ static int handle_signal(int sig, void *data) {
366} 366}
367 367
368static int display_event(int fd, uint32_t mask, void *data) { 368static int display_event(int fd, uint32_t mask, void *data) {
369 if (mask & WL_EVENT_HANGUP) { 369 if ((mask & WL_EVENT_HANGUP) || (mask & WL_EVENT_ERROR)) {
370 sway_terminate(0); 370 sway_terminate(0);
371 } 371 }
372 if (wl_display_dispatch(state.display) < 0) { 372
373 int count = 0;
374 if (mask & WL_EVENT_READABLE) {
375 count = wl_display_dispatch(state.display);
376 } else {
377 count = wl_display_dispatch_pending(state.display);
378 wl_display_flush(state.display);
379 }
380 if (count < 0) {
373 wlr_log_errno(WLR_ERROR, "wl_display_dispatch failed, exiting"); 381 wlr_log_errno(WLR_ERROR, "wl_display_dispatch failed, exiting");
374 sway_terminate(0); 382 sway_terminate(0);
375 } 383 }
376 wl_display_flush(state.display); 384 return count;
377 return 0;
378} 385}
379 386
380static void register_idle_timeout(void *item) { 387static void register_idle_timeout(void *item) {