2005-01-20 Havoc Pennington <hp@redhat.com>
authorHavoc Pennington <hp@redhat.com>
Fri, 21 Jan 2005 03:47:21 +0000 (03:47 +0000)
committerHavoc Pennington <hp@redhat.com>
Fri, 21 Jan 2005 03:47:21 +0000 (03:47 +0000)
* dbus/dbus-sysdeps.c (_dbus_poll): fix several bugs in the
select() version, patches from Tor Lillqvist

ChangeLog
dbus/dbus-sysdeps.c

index 2d0dd6a..bfd5688 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2005-01-20  Havoc Pennington  <hp@redhat.com>
 
+       * dbus/dbus-sysdeps.c (_dbus_poll): fix several bugs in the
+       select() version, patches from Tor Lillqvist
+
+2005-01-20  Havoc Pennington  <hp@redhat.com>
+
        * doc/dbus-tutorial.xml: replace > with &gt;
 
        * bus/services.c (bus_registry_acquire_service): validate the name
index d951a8d..96bf3fe 100644 (file)
@@ -1840,40 +1840,41 @@ _dbus_poll (DBusPollFD *fds,
 
   for (i = 0; i < n_fds; i++)
     {
-      DBusPollFD f = fds[i];
+      DBusPollFD *fdp = fds[i];
 
-      if (f.events & _DBUS_POLLIN)
-       FD_SET (f.fd, &read_set);
+      if (fdp->events & _DBUS_POLLIN)
+       FD_SET (fdp->fd, &read_set);
 
-      if (f.events & _DBUS_POLLOUT)
-       FD_SET (f.fd, &write_set);
+      if (fdp->events & _DBUS_POLLOUT)
+       FD_SET (fdp->fd, &write_set);
 
-      FD_SET (f.fd, &err_set);
+      FD_SET (fdp->fd, &err_set);
 
-      max_fd = MAX (max_fd, f.fd);
+      max_fd = MAX (max_fd, fdp->fd);
     }
     
   tv.tv_sec = timeout_milliseconds / 1000;
   tv.tv_usec = (timeout_milliseconds % 1000) * 1000;
 
-  ready = select (max_fd + 1, &read_set, &write_set, &err_set, &tv);
+  ready = select (max_fd + 1, &read_set, &write_set, &err_set,
+                  timeout_milliseconds < 0 ? NULL : &tv);
 
   if (ready > 0)
     {
       for (i = 0; i < n_fds; i++)
        {
-         DBusPollFD f = fds[i];
+         DBusPollFD *fdp = fds[i];
 
-         f.revents = 0;
+         fdp->revents = 0;
 
-         if (FD_ISSET (f.fd, &read_set))
-           f.revents |= _DBUS_POLLIN;
+         if (FD_ISSET (fdp->fd, &read_set))
+           fdp->revents |= _DBUS_POLLIN;
 
-         if (FD_ISSET (f.fd, &write_set))
-           f.revents |= _DBUS_POLLOUT;
+         if (FD_ISSET (fdp->fd, &write_set))
+           fdp->revents |= _DBUS_POLLOUT;
 
-         if (FD_ISSET (f.fd, &err_set))
-           f.revents |= _DBUS_POLLERR;
+         if (FD_ISSET (fdp->fd, &err_set))
+           fdp->revents |= _DBUS_POLLERR;
        }
     }