]> xenbits.xensource.com Git - libvirt.git/commitdiff
Fix dispatch of FD events when one or more handles are marked deleted
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 16 Mar 2009 10:35:21 +0000 (10:35 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 16 Mar 2009 10:35:21 +0000 (10:35 +0000)
ChangeLog
qemud/event.c

index 102318ee7db90a24a60c962e8e16e648e9523333..921ca8fe889b9557056bcd615015c2b003a06051 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Mar 16 10:35:00 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
+
+       * qemud/event.c: Fix dispatch of FD events when one or more
+       handles has been marked as deleted
+
 Mon Mar 16 10:30:00 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
 
        * qemud/remote.c: Don't allocate cpumaps arg if maplength is
index c9ea5638d56a2d8a09750b59fa17bf002b5c72f3..0887008b4df2a19a6ea91517868ea523ffcff9bd 100644 (file)
@@ -409,25 +409,26 @@ static int virEventDispatchTimeouts(void) {
  * Returns 0 upon success, -1 if an error occurred
  */
 static int virEventDispatchHandles(int nfds, struct pollfd *fds) {
-    int i;
+    int i, n;
 
-    for (i = 0 ; i < nfds ; i++) {
+    for (i = 0, n = 0 ; i < eventLoop.handlesCount && n < nfds ; i++) {
         if (eventLoop.handles[i].deleted) {
             EVENT_DEBUG("Skip deleted %d", eventLoop.handles[i].fd);
             continue;
         }
 
-        if (fds[i].revents) {
+        if (fds[n].revents) {
             virEventHandleCallback cb = eventLoop.handles[i].cb;
             void *opaque = eventLoop.handles[i].opaque;
-            int hEvents = virPollEventToEventHandleType(fds[i].revents);
-            EVENT_DEBUG("Dispatch %d %d %p", fds[i].fd,
-                        fds[i].revents, eventLoop.handles[i].opaque);
+            int hEvents = virPollEventToEventHandleType(fds[n].revents);
+            EVENT_DEBUG("Dispatch %d %d %p", fds[n].fd,
+                        fds[n].revents, eventLoop.handles[i].opaque);
             virEventUnlock();
             (cb)(eventLoop.handles[i].watch,
-                 fds[i].fd, hEvents, opaque);
+                 fds[n].fd, hEvents, opaque);
             virEventLock();
         }
+        n++;
     }
 
     return 0;