Fix dispatch of FD events when one or more handles are marked deleted

This commit is contained in:
Daniel P. Berrange 2009-03-16 10:35:21 +00:00
parent 24a149cfa2
commit 29ed758ae0
2 changed files with 13 additions and 7 deletions

View File

@ -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

View 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;