From: Martin Kletzander Date: Fri, 20 Sep 2013 14:40:20 +0000 (+0200) Subject: qemu: Fix seamless SPICE migration X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=484cc3217b73b865f00bf42a9c12187b37200699;p=people%2Fliuw%2Flibxenctrl-split%2Flibvirt.git qemu: Fix seamless SPICE migration Since the wait is done during migration (still inside QEMU_ASYNC_JOB_MIGRATION_OUT), the code should enter the monitor as such in order to prohibit all other jobs from interfering in the meantime. This patch fixes bug #1009886 in which qemuDomainGetBlockInfo was waiting on the monitor condition and after GetSpiceMigrationStatus mangled its internal data, the daemon crashed. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1009886 --- diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index d7b89fccb..3a1aab763 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -1595,7 +1595,10 @@ qemuMigrationWaitForSpice(virQEMUDriverPtr driver, /* Poll every 50ms for progress & to allow cancellation */ struct timespec ts = { .tv_sec = 0, .tv_nsec = 50 * 1000 * 1000ull }; - qemuDomainObjEnterMonitor(driver, vm); + if (qemuDomainObjEnterMonitorAsync(driver, vm, + QEMU_ASYNC_JOB_MIGRATION_OUT) < 0) + return -1; + if (qemuMonitorGetSpiceMigrationStatus(priv->mon, &spice_migrated) < 0) { qemuDomainObjExitMonitor(driver, vm);