summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2015-01-28 09:25:03 -0600
committerBryce Harrington <bryce@osg.samsung.com>2015-01-28 18:12:31 -0800
commit5ec8062df26f21cfe7a031eaf83a1b4d99085f36 (patch)
treec25d874a54fe9c85d401df9f55e64d18eef3c73d
parent7575e2ea19dcb6012a6fd4729197d12a68b89025 (diff)
event-loop: Dispatch idle callbacks twice
To fix a shutdown crash in weston's x11 compositor I want to move the weston X window close to an idle handler. Since idle handlers are processed at the start of an event loop, the handler that deals with window close will run at the start of the next input_loop dispatch, after which the dispatcher blocks on epoll forever (since all input events that will ever occur have been consumed). Dispatching idle callbacks both at the start and end of event-loop processing will prevent this permanent blocking. Note that just moving the callback dispatch could theoretically result in an idle callback being delayed indefinitely while waiting for epoll_wait() to complete. Callbacks are removed from the list when they're run, so the second dispatch won't result in any extra calls. Signed-off-by: Derek Foreman <derekf@osg.samsung.com> Reviewed-by: Giulio Camuffo <giuliocamuffo@gmail.com> Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
-rw-r--r--src/event-loop.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/event-loop.c b/src/event-loop.c
index 1f571ba..d257d78 100644
--- a/src/event-loop.c
+++ b/src/event-loop.c
@@ -421,10 +421,12 @@ wl_event_loop_dispatch(struct wl_event_loop *loop, int timeout)
wl_event_loop_process_destroy_list(loop);
+ wl_event_loop_dispatch_idle(loop);
+
do {
n = post_dispatch_check(loop);
} while (n > 0);
-
+
return 0;
}