]> git.proxmox.com Git - mirror_qemu.git/commit - async.c
AioContext: export and use aio_dispatch
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 9 Jul 2014 09:53:05 +0000 (11:53 +0200)
committerStefan Hajnoczi <stefanha@redhat.com>
Fri, 29 Aug 2014 09:46:58 +0000 (10:46 +0100)
commite4c7e2d12d7b1c4501ab3397218a206d4953e633
treee6953b841050e558d58554c2db9b066869322209
parent3672fa50837c1700deb1f86f0068c22c7e49aa22
AioContext: export and use aio_dispatch

So far, aio_poll's scheme was dispatch/poll/dispatch, where
the first dispatch phase was used only in the GSource case in
order to avoid a blocking poll.  Earlier patches changed it to
dispatch/prepare/poll/dispatch, where prepare is aio_compute_timeout.

By making aio_dispatch public, we can remove the first dispatch
phase altogether, so that both aio_poll and the GSource use the same
prepare/poll/dispatch scheme.

This patch breaks the invariant that aio_poll(..., true) will not block
the first time it returns false.  This used to be fundamental for
qemu_aio_flush's implementation as "while (qemu_aio_wait()) {}" but
no code in QEMU relies on this invariant anymore.  The return value
of aio_poll() is now comparable with that of g_main_context_iteration.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
aio-posix.c
aio-win32.c
async.c
include/block/aio.h