[PATCH 1/2] dbus: don't dispatch dbus events on select() EINTR

Adam Jackson ajax at redhat.com
Thu Apr 24 10:38:28 PDT 2014


From: Ray Strode <rstrode at redhat.com>

wakeup handlers are called even when select() returns EINTR,
and when they're called the passed fd set is undefined.

This commit fixes the dbus wakeup handler to avoid dispatching
into dbus spuriously.

Reviewed-by: Adam Jackson <ajax at redhat.com>
Signed-off-by: Ray Strode <rstrode at redhat.com>
---
 config/dbus-core.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/config/dbus-core.c b/config/dbus-core.c
index b0fd92d..8351ea4 100644
--- a/config/dbus-core.c
+++ b/config/dbus-core.c
@@ -48,11 +48,11 @@ static struct dbus_core_info bus_info;
 static CARD32 reconnect_timer(OsTimerPtr timer, CARD32 time, void *arg);
 
 static void
-wakeup_handler(void *data, int err, void *read_mask)
+wakeup_handler(void *data, int num_fds, void *read_mask)
 {
     struct dbus_core_info *info = data;
 
-    if (info->connection && FD_ISSET(info->fd, (fd_set *) read_mask)) {
+    if (info->connection && num_fds > 0 && FD_ISSET(info->fd, (fd_set *) read_mask)) {
         do {
             dbus_connection_read_write_dispatch(info->connection, 0);
         } while (info->connection &&
-- 
1.8.5.3



More information about the xorg-devel mailing list