This series simplifies heavily aio_poll by splitting it into three phases: prepare (aio_compute_timeout), poll, dispatch. The resulting code shares more logic between aio_poll and the GSource wrappers, and makes it easier to add Win32 support for sockets.
Win32 support for sockets is a prerequisite for moving the NBD server into the BlockDriverState's attached AioContext. It is done in the final patch, based on earlier work from Or Goshen (from Intel). I had to more or less rewrite it to fit the new framework, but you can see parts of Or's work, as well as traces of aio-posix.c and main-loop.c logic. Tested with NBD boot under Wine. Paolo Paolo Bonzini (10): AioContext: take bottom halves into account when computing aio_poll timeout aio-win32: Evaluate timers after handles aio-win32: Factor out duplicate code into aio_dispatch_handlers AioContext: run bottom halves after polling AioContext: export and use aio_dispatch test-aio: test timers on Windows too aio-win32: add aio_set_dispatching optimization AioContext: introduce aio_prepare qemu-coroutine-io: fix for Win32 aio-win32: add support for sockets aio-posix.c | 58 ++++-------- aio-win32.c | 262 +++++++++++++++++++++++++++++++++++++++------------- async.c | 39 +++++--- block/Makefile.objs | 2 - include/block/aio.h | 25 ++++- nbd.c | 2 +- qemu-coroutine-io.c | 4 +- tests/test-aio.c | 48 +++------- 8 files changed, 277 insertions(+), 163 deletions(-) -- 1.9.3