mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 00:33:55 -06:00
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:
parent
2f47da5f7f
commit
9d45665448
11 changed files with 68 additions and 55 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue