Check for X11 events before selecting (FDO bug #15293)
authorColin Walters <walters@space-ghost.verbum.private>
Mon, 31 Mar 2008 22:20:07 +0000 (18:20 -0400)
committerColin Walters <walters@space-ghost.verbum.private>
Mon, 31 Mar 2008 22:20:07 +0000 (18:20 -0400)
ChangeLog
tools/dbus-launch.c

index 4cd19aa..5628015 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,11 @@
-2008-03-26  Colin Walters  <walters@verbum.org>
+2008-03-31  Colin Walters  <walters@verbum.org>
+
+       Patch from Owen Taylor <otaylor@redhat.com>
+
+       * tools/dbus-launch-x11.c: Check for X11 events before
+       selecting (FDO bug #15293)
+
+2008-03-31  Colin Walters  <walters@verbum.org>
 
        Patch from Owen Taylor <otaylor@redhat.com>
 
index 6a10ffa..216f743 100644 (file)
@@ -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)