hw/xwayland: Use NotifyFd handler to monitor wayland socket
Replace the block/wakeup handler with a NotifyFd callback instead. Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
8543d4d8bc
commit
f933a1b38e
|
@ -115,6 +115,8 @@ xwl_close_screen(ScreenPtr screen)
|
||||||
&xwl_screen->seat_list, link)
|
&xwl_screen->seat_list, link)
|
||||||
xwl_seat_destroy(xwl_seat);
|
xwl_seat_destroy(xwl_seat);
|
||||||
|
|
||||||
|
RemoveNotifyFd(xwl_screen->wayland_fd);
|
||||||
|
|
||||||
wl_display_disconnect(xwl_screen->display);
|
wl_display_disconnect(xwl_screen->display);
|
||||||
|
|
||||||
screen->CloseScreen = xwl_screen->CloseScreen;
|
screen->CloseScreen = xwl_screen->CloseScreen;
|
||||||
|
@ -453,17 +455,11 @@ static const struct wl_registry_listener registry_listener = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
wakeup_handler(void *data, int err, void *read_mask)
|
socket_handler(int fd, int ready, void *data)
|
||||||
{
|
{
|
||||||
struct xwl_screen *xwl_screen = data;
|
struct xwl_screen *xwl_screen = data;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (err < 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!FD_ISSET(xwl_screen->wayland_fd, (fd_set *) read_mask))
|
|
||||||
return;
|
|
||||||
|
|
||||||
ret = wl_display_read_events(xwl_screen->display);
|
ret = wl_display_read_events(xwl_screen->display);
|
||||||
if (ret == -1)
|
if (ret == -1)
|
||||||
FatalError("failed to dispatch Wayland events: %s\n", strerror(errno));
|
FatalError("failed to dispatch Wayland events: %s\n", strerror(errno));
|
||||||
|
@ -476,7 +472,12 @@ wakeup_handler(void *data, int err, void *read_mask)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
block_handler(void *data, struct timeval **tv, void *read_mask)
|
wakeup_handler(void *data, int err, void *pRead)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
block_handler(void *data, OSTimePtr pTimeout, void *pRead)
|
||||||
{
|
{
|
||||||
struct xwl_screen *xwl_screen = data;
|
struct xwl_screen *xwl_screen = data;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -651,7 +652,7 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
xwl_screen->wayland_fd = wl_display_get_fd(xwl_screen->display);
|
xwl_screen->wayland_fd = wl_display_get_fd(xwl_screen->display);
|
||||||
AddGeneralSocket(xwl_screen->wayland_fd);
|
SetNotifyFd(xwl_screen->wayland_fd, socket_handler, X_NOTIFY_READ, xwl_screen);
|
||||||
RegisterBlockAndWakeupHandlers(block_handler, wakeup_handler, xwl_screen);
|
RegisterBlockAndWakeupHandlers(block_handler, wakeup_handler, xwl_screen);
|
||||||
|
|
||||||
pScreen->SaveScreen = xwl_save_screen;
|
pScreen->SaveScreen = xwl_save_screen;
|
||||||
|
|
Loading…
Reference in New Issue