aboutsummaryrefslogtreecommitdiff
path: root/vl.c
diff options
context:
space:
mode:
authorJuan Quintela <quintela@redhat.com>2010-03-11 17:55:41 +0100
committerAnthony Liguori <aliguori@us.ibm.com>2010-03-19 15:27:27 -0500
commit4bed9837309e58d208183f81d8344996744292cf (patch)
tree6901a078fdaae24106d36b14a35700a83e254613 /vl.c
parentca96c316c0a10d7c673063f1bacb7d2c816cf38e (diff)
Handle deleted IOHandlers in a single buffer
Signed-off-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'vl.c')
-rw-r--r--vl.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/vl.c b/vl.c
index 1e23d56444..d69250ca26 100644
--- a/vl.c
+++ b/vl.c
@@ -2836,20 +2836,17 @@ void main_loop_wait(int nonblocking)
if (ret > 0) {
IOHandlerRecord *pioh;
- QLIST_FOREACH(ioh, &io_handlers, next) {
- if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
- ioh->fd_read(ioh->opaque);
- }
- if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
- ioh->fd_write(ioh->opaque);
- }
- }
-
- /* remove deleted IO handlers */
QLIST_FOREACH_SAFE(ioh, &io_handlers, next, pioh) {
if (ioh->deleted) {
QLIST_REMOVE(ioh, next);
qemu_free(ioh);
+ continue;
+ }
+ if (ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
+ ioh->fd_read(ioh->opaque);
+ }
+ if (ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
+ ioh->fd_write(ioh->opaque);
}
}
}