On 8/8/19 4:26 PM, Jiri Denemark wrote:
Since qemuDomain{Device,}DefPostParse callbacks require qemuCaps, we need to make sure they get the capabilities stored in the domain's private data if the domain is running. Passing NULL may cause QEMU capabilities probing to be triggered in case the cached capabilities are not valid anymore. When this happens while a running domain object is locked, QMP event delivered to the domain before QEMU capabilities probing finishes will deadlock the event loop. The funny part is that qemuDomainDeviceDefPostParse and qemuDomainDefPostParse are a callbacks for virDomainDeviceDefPostParse and virDomainDefPostParse respectively and we need to make sure to properly set the parseOpaque pointer in all paths which could eventually go through these general APIs. If you are interested, you can look at the called-by graph for virDomainDeviceDefPostParse at http://people.redhat.com/jdenemar/virDomainDeviceDefPostParse.svg Only a few of those paths were correct. Jiri Denemark (10): qemu: Pass qemuCaps to qemuDomainDefCopy qemu: Pass qemuCaps to qemuDomainDefFormatBufInternal qemu: Pass qemuCaps to qemuDomainSaveImageOpen qemu: Pass qemuCaps to qemuMigrationAnyPrepareDef qemu: Pass correct qemuCaps to virDomainDefParseString qemu: Pass qemuCaps to qemuMigrationCookieXMLParse qemu: Pass correct qemuCaps to virDomainDefCopy qemu: Pass correct qemuCaps to virDomainDefPostParse qemu: Pass correct qemuCaps to virDomainDefParseNode qemu: Pass correct qemuCaps to virDomainDeviceDefPostParse src/conf/checkpoint_conf.c | 9 +- src/conf/checkpoint_conf.h | 1 + src/conf/domain_conf.c | 41 ++++--- src/conf/domain_conf.h | 13 ++- src/conf/snapshot_conf.c | 11 +- src/conf/snapshot_conf.h | 2 + src/esx/esx_driver.c | 2 +- src/libxl/libxl_domain.c | 2 +- src/libxl/libxl_driver.c | 22 ++-- src/libxl/libxl_migration.c | 2 +- src/lxc/lxc_driver.c | 18 +-- src/lxc/lxc_process.c | 2 +- src/openvz/openvz_driver.c | 2 +- src/phyp/phyp_driver.c | 2 +- src/qemu/qemu_domain.c | 53 +++++---- src/qemu/qemu_domain.h | 5 + src/qemu/qemu_driver.c | 149 +++++++++++++++--------- src/qemu/qemu_migration.c | 22 ++-- src/qemu/qemu_migration.h | 1 + src/qemu/qemu_migration_cookie.c | 16 ++- src/qemu/qemu_process.c | 13 ++- src/test/test_driver.c | 7 +- src/vbox/vbox_common.c | 8 +- tests/qemudomaincheckpointxml2xmltest.c | 2 +- tests/qemudomainsnapshotxml2xmltest.c | 2 +- tests/qemuhotplugtest.c | 4 +- 26 files changed, 256 insertions(+), 155 deletions(-)
Reviewed-by: Michal Privoznik <mprivozn@xxxxxxxxxx> Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list