diff options
author | Stefan Reiter <s.reiter@proxmox.com> | 2021-03-22 16:40:24 +0100 |
---|---|---|
committer | Markus Armbruster <armbru@redhat.com> | 2021-05-12 17:29:11 +0200 |
commit | a67b996e7894edfafbcd3fd007c9f58f26d25908 (patch) | |
tree | e5f1379daffd2c1357685a4dc872dcd0ff9a9b80 /util/qemu-coroutine-sleep.c | |
parent | a5ccdccc97d6e0d75282ede5b866cf694e9602b0 (diff) | |
download | qemu-a67b996e7894edfafbcd3fd007c9f58f26d25908.zip qemu-a67b996e7894edfafbcd3fd007c9f58f26d25908.tar.gz qemu-a67b996e7894edfafbcd3fd007c9f58f26d25908.tar.bz2 |
monitor/qmp: fix race on CHR_EVENT_CLOSED without OOB
The QMP dispatcher coroutine holds the qmp_queue_lock over a yield
point, where it expects to be rescheduled from the main context. If a
CHR_EVENT_CLOSED event is received just then, it can race and block the
main thread on the mutex in monitor_qmp_cleanup_queue_and_resume.
monitor_resume does not need to be called from main context, so we can
call it immediately after popping a request from the queue, which allows
us to drop the qmp_queue_lock mutex before yielding.
Suggested-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
Message-Id: <20210322154024.15011-1-s.reiter@proxmox.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-stable@nongnu.org
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Diffstat (limited to 'util/qemu-coroutine-sleep.c')
0 files changed, 0 insertions, 0 deletions