1f25c172f8
The aio_co_reschedule_self() API is designed to avoid the race condition between scheduling the coroutine in another AioContext and yielding. The QMP dispatch code uses the open-coded version that appears susceptible to the race condition at first glance: aio_co_schedule(qemu_get_aio_context(), qemu_coroutine_self()); qemu_coroutine_yield(); The code is actually safe because the iohandler and qemu_aio_context AioContext run under the Big QEMU Lock. Nevertheless, set a good example and use aio_co_reschedule_self() so it's obvious that there is no race. Suggested-by: Hanna Reitz <hreitz@redhat.com> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Reviewed-by: Hanna Czenczek <hreitz@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Message-ID: <20240206190610.107963-6-stefanha@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Acked-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com> |
||
---|---|---|
.. | ||
acpi.json | ||
audio.json | ||
authz.json | ||
block-core.json | ||
block-export.json | ||
block.json | ||
char.json | ||
common.json | ||
compat.json | ||
control.json | ||
crypto.json | ||
cryptodev.json | ||
cxl.json | ||
dump.json | ||
error.json | ||
introspect.json | ||
job.json | ||
machine-common.json | ||
machine-target.json | ||
machine.json | ||
meson.build | ||
migration.json | ||
misc-target.json | ||
misc.json | ||
net.json | ||
opts-visitor.c | ||
pci.json | ||
pragma.json | ||
qapi-clone-visitor.c | ||
qapi-dealloc-visitor.c | ||
qapi-forward-visitor.c | ||
qapi-schema.json | ||
qapi-type-helpers.c | ||
qapi-util.c | ||
qapi-visit-core.c | ||
qdev.json | ||
qmp-dispatch.c | ||
qmp-event.c | ||
qmp-registry.c | ||
qobject-input-visitor.c | ||
qobject-output-visitor.c | ||
qom.json | ||
rdma.json | ||
replay.json | ||
rocker.json | ||
run-state.json | ||
sockets.json | ||
stats.json | ||
string-input-visitor.c | ||
string-output-visitor.c | ||
tpm.json | ||
trace-events | ||
trace.h | ||
trace.json | ||
transaction.json | ||
ui.json | ||
virtio.json | ||
yank.json |