511f6cd625
- Avoid crash if storage volume deletion fails - Fix multiple FD leaks - Fix bug in dispatch FD events when a callback is marked deleted - Fix parsing of storage volume owner/group/mode - Fix memory allocation for virDomainGetVcpus RPC handler - Avoid deadlock in setting vCPU count - Use correct driver name in Xen block detach
47 lines
1.8 KiB
Diff
47 lines
1.8 KiB
Diff
From: Daniel P. Berrange <berrange@redhat.com>
|
|
Date: Mon, 16 Mar 2009 10:35:21 +0000 (+0000)
|
|
Subject: Fix dispatch of FD events when one or more handles are marked deleted
|
|
X-Git-Url: http://git.et.redhat.com/?p=libvirt.git;a=commitdiff_plain;h=10baf3deb8588f5902b6f2eb362fb408707e3d95
|
|
|
|
Fix dispatch of FD events when one or more handles are marked deleted
|
|
---
|
|
|
|
diff --git a/qemud/event.c b/qemud/event.c
|
|
index c9ea563..0887008 100644
|
|
--- a/qemud/event.c
|
|
+++ b/qemud/event.c
|
|
@@ -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;
|