提交 29ed758a 编写于 作者: D Daniel P. Berrange

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

上级 24a149cf
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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册