block: explicitly acquire aiocontext in callbacks that need it

This covers both file descriptor callbacks and polling callbacks,
since they execute related code.

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Daniel P. Berrange <berrange@redhat.com>
Message-id: 20170213135235.12274-14-pbonzini@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Paolo Bonzini 2017-02-13 14:52:30 +01:00 committed by Stefan Hajnoczi
parent 2f47da5f7f
commit 9d45665448
11 changed files with 68 additions and 55 deletions

View file

@ -402,9 +402,7 @@ static bool aio_dispatch_handlers(AioContext *ctx)
(revents & (G_IO_IN | G_IO_HUP | G_IO_ERR)) &&
aio_node_check(ctx, node->is_external) &&
node->io_read) {
aio_context_acquire(ctx);
node->io_read(node->opaque);
aio_context_release(ctx);
/* aio_notify() does not count as progress */
if (node->opaque != &ctx->notifier) {
@ -415,9 +413,7 @@ static bool aio_dispatch_handlers(AioContext *ctx)
(revents & (G_IO_OUT | G_IO_ERR)) &&
aio_node_check(ctx, node->is_external) &&
node->io_write) {
aio_context_acquire(ctx);
node->io_write(node->opaque);
aio_context_release(ctx);
progress = true;
}
@ -618,10 +614,7 @@ bool aio_poll(AioContext *ctx, bool blocking)
start = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
}
aio_context_acquire(ctx);
progress = try_poll_mode(ctx, blocking);
aio_context_release(ctx);
if (!progress) {
assert(npfd == 0);

View file

@ -266,9 +266,7 @@ static bool aio_dispatch_handlers(AioContext *ctx, HANDLE event)
(revents || event_notifier_get_handle(node->e) == event) &&
node->io_notify) {
node->pfd.revents = 0;
aio_context_acquire(ctx);
node->io_notify(node->e);
aio_context_release(ctx);
/* aio_notify() does not count as progress */
if (node->e != &ctx->notifier) {
@ -280,15 +278,11 @@ static bool aio_dispatch_handlers(AioContext *ctx, HANDLE event)
(node->io_read || node->io_write)) {
node->pfd.revents = 0;
if ((revents & G_IO_IN) && node->io_read) {
aio_context_acquire(ctx);
node->io_read(node->opaque);
aio_context_release(ctx);
progress = true;
}
if ((revents & G_IO_OUT) && node->io_write) {
aio_context_acquire(ctx);
node->io_write(node->opaque);
aio_context_release(ctx);
progress = true;
}