Signed-off-by: Fam Zheng <f...@redhat.com> --- aio-win32.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/aio-win32.c b/aio-win32.c index f5ecf57..1f6a3f0 100644 --- a/aio-win32.c +++ b/aio-win32.c @@ -28,6 +28,7 @@ struct AioHandler { GPollFD pfd; int deleted; void *opaque; + int disable_cnt; int type; QLIST_ENTRY(AioHandler) node; }; @@ -309,7 +310,7 @@ bool aio_poll(AioContext *ctx, bool blocking) /* fill fd sets */ count = 0; QLIST_FOREACH(node, &ctx->aio_handlers, node) { - if (!node->deleted && node->io_notify) { + if (!node->deleted && node->io_notify && !node->disable_cnt) { events[count++] = event_notifier_get_handle(node->e); } } @@ -368,3 +369,17 @@ bool aio_poll(AioContext *ctx, bool blocking) aio_context_release(ctx); return progress; } + +void aio_disable_enable_clients(AioContext *ctx, int clients_mask, + bool is_disable) +{ + AioHandler *node; + aio_context_acquire(ctx); + + QLIST_FOREACH(node, &ctx->aio_handlers, node) { + if (!node->deleted && node->type & clients_mask) { + node->disable_cnt += is_disable ? 1 : -1; + } + } + aio_context_release(ctx); +} -- 2.4.3