mirror of
https://github.com/mii443/qemu.git
synced 2025-08-22 23:25:48 +00:00
Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging
Block layer patches: - qemu-storage-daemon: Remove QemuOpts from --object parser - monitor: Fix order in monitor_cleanup() - Deprecate the sheepdog block driver # gpg: Signature made Thu 15 Oct 2020 15:48:10 BST # gpg: using RSA key DC3DEB159A9AF95D3D7456FE7F09B272C88F2FD6 # gpg: issuer "kwolf@redhat.com" # gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>" [full] # Primary key fingerprint: DC3D EB15 9A9A F95D 3D74 56FE 7F09 B272 C88F 2FD6 * remotes/kevin/tags/for-upstream: block: deprecate the sheepdog block driver block: drop moderated sheepdog mailing list from MAINTAINERS file monitor: Fix order in monitor_cleanup() qemu-storage-daemon: Remove QemuOpts from --object parser qom: Add user_creatable_print_help_from_qdict() qom: Factor out helpers from user_creatable_print_help() keyval: Parse help options keyval: Fix parsing of ',' in value of implied key test-keyval: Demonstrate misparse of ',' with implied key keyval: Fix and clarify grammar Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
@ -632,23 +632,9 @@ void monitor_cleanup(void)
|
||||
iothread_stop(mon_iothread);
|
||||
}
|
||||
|
||||
/* Flush output buffers and destroy monitors */
|
||||
qemu_mutex_lock(&monitor_lock);
|
||||
monitor_destroyed = true;
|
||||
while (!QTAILQ_EMPTY(&mon_list)) {
|
||||
Monitor *mon = QTAILQ_FIRST(&mon_list);
|
||||
QTAILQ_REMOVE(&mon_list, mon, entry);
|
||||
/* Permit QAPI event emission from character frontend release */
|
||||
qemu_mutex_unlock(&monitor_lock);
|
||||
monitor_flush(mon);
|
||||
monitor_data_destroy(mon);
|
||||
qemu_mutex_lock(&monitor_lock);
|
||||
g_free(mon);
|
||||
}
|
||||
qemu_mutex_unlock(&monitor_lock);
|
||||
|
||||
/*
|
||||
* The dispatcher needs to stop before destroying the I/O thread.
|
||||
* The dispatcher needs to stop before destroying the monitor and
|
||||
* the I/O thread.
|
||||
*
|
||||
* We need to poll both qemu_aio_context and iohandler_ctx to make
|
||||
* sure that the dispatcher coroutine keeps making progress and
|
||||
@ -665,6 +651,21 @@ void monitor_cleanup(void)
|
||||
(aio_poll(iohandler_get_aio_context(), false),
|
||||
qatomic_mb_read(&qmp_dispatcher_co_busy)));
|
||||
|
||||
/* Flush output buffers and destroy monitors */
|
||||
qemu_mutex_lock(&monitor_lock);
|
||||
monitor_destroyed = true;
|
||||
while (!QTAILQ_EMPTY(&mon_list)) {
|
||||
Monitor *mon = QTAILQ_FIRST(&mon_list);
|
||||
QTAILQ_REMOVE(&mon_list, mon, entry);
|
||||
/* Permit QAPI event emission from character frontend release */
|
||||
qemu_mutex_unlock(&monitor_lock);
|
||||
monitor_flush(mon);
|
||||
monitor_data_destroy(mon);
|
||||
qemu_mutex_lock(&monitor_lock);
|
||||
g_free(mon);
|
||||
}
|
||||
qemu_mutex_unlock(&monitor_lock);
|
||||
|
||||
if (mon_iothread) {
|
||||
iothread_destroy(mon_iothread);
|
||||
mon_iothread = NULL;
|
||||
|
Reference in New Issue
Block a user