mirror of https://gitee.com/openkylin/libvirt.git
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>
|
||||
|
||||
* 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
|
||||
*/
|
||||
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;
|
||||
|
|
Loading…
Reference in New Issue