From 0bfc5e8d23a5ae56eee5ef2073911cddcbd0c4b0 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Mon, 31 Mar 2008 18:20:07 -0400 Subject: Check for X11 events before selecting (FDO bug #15293) --- ChangeLog | 9 ++++++++- tools/dbus-launch.c | 18 +++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4cd19aab..56280156 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,11 @@ -2008-03-26 Colin Walters +2008-03-31 Colin Walters + + Patch from Owen Taylor + + * tools/dbus-launch-x11.c: Check for X11 events before + selecting (FDO bug #15293) + +2008-03-31 Colin Walters Patch from Owen Taylor diff --git a/tools/dbus-launch.c b/tools/dbus-launch.c index 6a10ffa3..216f7435 100644 --- a/tools/dbus-launch.c +++ b/tools/dbus-launch.c @@ -458,6 +458,17 @@ kill_bus_when_session_ends (void) while (TRUE) { +#ifdef DBUS_BUILD_X11 + /* Dump events on the floor, and let + * IO error handler run if we lose + * the X connection. It's important to + * run this before going into select() since + * we might have queued outgoing messages or + * events. + */ + x11_handle_event (); +#endif + FD_ZERO (&read_set); FD_ZERO (&err_set); @@ -472,7 +483,7 @@ kill_bus_when_session_ends (void) FD_SET (x_fd, &read_set); FD_SET (x_fd, &err_set); } - + select (MAX (tty_fd, x_fd) + 1, &read_set, NULL, &err_set, NULL); @@ -483,15 +494,12 @@ kill_bus_when_session_ends (void) } #ifdef DBUS_BUILD_X11 - /* Dump events on the floor, and let - * IO error handler run if we lose - * the X connection + /* Events will be processed before we select again */ if (x_fd >= 0) verbose ("X fd condition reading = %d error = %d\n", FD_ISSET (x_fd, &read_set), FD_ISSET (x_fd, &err_set)); - x11_handle_event (); #endif if (tty_fd >= 0) -- cgit