LIST_FOREACH(node, &aio_handlers, node) {
if (node->fd == fd)
- return node;
+ if (!node->deleted)
+ return node;
}
return NULL;
do {
ret = 0;
+ /*
+ * If there are pending emulated aio start them now so flush
+ * will be able to return 1.
+ */
+ qemu_aio_wait();
+
LIST_FOREACH(node, &aio_handlers, node) {
ret |= node->io_flush(node->opaque);
}
-
- qemu_aio_wait();
- } while (ret > 0);
+ } while (qemu_bh_poll() || ret > 0);
}
void qemu_aio_wait(void)