mirror of
https://gitlab.freedesktop.org/wayland/weston
synced 2024-10-01 19:52:53 +00:00
xcb-client-helper: Call xcb_wait_for_event directly
We're currently calling ppoll() before calling xcb_wait_for_event(), which may be due to initially trying to make this non-blocking. However, xcb_wait_for_event() reads all events available - even if there are more than one. There are a handful of X properties we're sent that we don't explicitly ask for, and if these end up in the same read, we could theoretically end up in a poll() with nothing coming in. Drop the extra ppoll() and just let xcb_wait_for_event() do the blocking for us. I'm hoping this fixes the occasional timeout in the xwayland test, but it's a reasonable code simplification even if it doesn't. Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
This commit is contained in:
parent
2d3cca3d3e
commit
56d3ea128a
|
@ -380,23 +380,6 @@ window_x11_unmap(struct window_x11 *window)
|
||||||
xcb_flush(window->conn->connection);
|
xcb_flush(window->conn->connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
static xcb_generic_event_t *
|
|
||||||
poll_for_event(xcb_connection_t *conn)
|
|
||||||
{
|
|
||||||
int fd = xcb_get_file_descriptor(conn);
|
|
||||||
struct pollfd pollfds = {};
|
|
||||||
int rpol;
|
|
||||||
|
|
||||||
pollfds.fd = fd;
|
|
||||||
pollfds.events = POLLIN;
|
|
||||||
|
|
||||||
rpol = ppoll(&pollfds, 1, NULL, NULL);
|
|
||||||
if (rpol > 0 && (pollfds.revents & POLLIN))
|
|
||||||
return xcb_wait_for_event(conn);
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
window_x11_set_cursor(struct window_x11 *window, const char *cursor_name)
|
window_x11_set_cursor(struct window_x11 *window, const char *cursor_name)
|
||||||
{
|
{
|
||||||
|
@ -478,7 +461,7 @@ handle_events_x11(struct window_x11 *window)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ev = poll_for_event(window->conn->connection);
|
ev = xcb_wait_for_event(window->conn->connection);
|
||||||
if (!ev) {
|
if (!ev) {
|
||||||
fprintf(stderr, "Error, no event received, "
|
fprintf(stderr, "Error, no event received, "
|
||||||
"although we requested for one!\n");
|
"although we requested for one!\n");
|
||||||
|
|
Loading…
Reference in a new issue