mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-26 18:41:17 +00:00
Fix dispatch of FD events when one or more handles are marked deleted
This commit is contained in:
parent
24a149cfa2
commit
29ed758ae0
@ -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>
|
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
|
* qemud/remote.c: Don't allocate cpumaps arg if maplength is
|
||||||
|
@ -409,25 +409,26 @@ static int virEventDispatchTimeouts(void) {
|
|||||||
* Returns 0 upon success, -1 if an error occurred
|
* Returns 0 upon success, -1 if an error occurred
|
||||||
*/
|
*/
|
||||||
static int virEventDispatchHandles(int nfds, struct pollfd *fds) {
|
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) {
|
if (eventLoop.handles[i].deleted) {
|
||||||
EVENT_DEBUG("Skip deleted %d", eventLoop.handles[i].fd);
|
EVENT_DEBUG("Skip deleted %d", eventLoop.handles[i].fd);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fds[i].revents) {
|
if (fds[n].revents) {
|
||||||
virEventHandleCallback cb = eventLoop.handles[i].cb;
|
virEventHandleCallback cb = eventLoop.handles[i].cb;
|
||||||
void *opaque = eventLoop.handles[i].opaque;
|
void *opaque = eventLoop.handles[i].opaque;
|
||||||
int hEvents = virPollEventToEventHandleType(fds[i].revents);
|
int hEvents = virPollEventToEventHandleType(fds[n].revents);
|
||||||
EVENT_DEBUG("Dispatch %d %d %p", fds[i].fd,
|
EVENT_DEBUG("Dispatch %d %d %p", fds[n].fd,
|
||||||
fds[i].revents, eventLoop.handles[i].opaque);
|
fds[n].revents, eventLoop.handles[i].opaque);
|
||||||
virEventUnlock();
|
virEventUnlock();
|
||||||
(cb)(eventLoop.handles[i].watch,
|
(cb)(eventLoop.handles[i].watch,
|
||||||
fds[i].fd, hEvents, opaque);
|
fds[n].fd, hEvents, opaque);
|
||||||
virEventLock();
|
virEventLock();
|
||||||
}
|
}
|
||||||
|
n++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user