The patch preserves the constraint that the only waiter is allowed. Signed-off-by: Denis V. Lunev <d...@openvz.org> CC: Kevin Wolf <kw...@redhat.com> CC: Max Reitz <mre...@redhat.com> CC: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> CC: Denis Plotnikov <dplotni...@virtuozzo.com> --- block/aio_task.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/block/aio_task.c b/block/aio_task.c index 88989fa248..f338049147 100644 --- a/block/aio_task.c +++ b/block/aio_task.c @@ -27,7 +27,7 @@ #include "block/aio_task.h" struct AioTaskPool { - Coroutine *main_co; + Coroutine *wake_co; int status; int max_busy_tasks; int busy_tasks; @@ -54,15 +54,15 @@ static void coroutine_fn aio_task_co(void *opaque) if (pool->waiting) { pool->waiting = false; - aio_co_wake(pool->main_co); + aio_co_wake(pool->wake_co); } } void coroutine_fn aio_task_pool_wait_one(AioTaskPool *pool) { assert(pool->busy_tasks > 0); - assert(qemu_coroutine_self() == pool->main_co); + pool->wake_co = qemu_coroutine_self(); pool->waiting = true; qemu_coroutine_yield(); @@ -98,7 +98,7 @@ AioTaskPool *coroutine_fn aio_task_pool_new(int max_busy_tasks) { AioTaskPool *pool = g_new0(AioTaskPool, 1); - pool->main_co = qemu_coroutine_self(); + pool->wake_co = NULL; pool->max_busy_tasks = max_busy_tasks; return pool; -- 2.17.1