diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 99545a74aba8c68a9ce5f5cd03930a5b1ce245be..97de6f74cfba0b2a47df3de5851fc2fb7cc79ac1 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -149,6 +149,30 @@ void qemuDomainEventQueue(virQEMUDriverPtr driver, } +void +qemuDomainEventEmitJobCompleted(virQEMUDriverPtr driver, + virDomainObjPtr vm) +{ + qemuDomainObjPrivatePtr priv = vm->privateData; + virObjectEventPtr event; + virTypedParameterPtr params = NULL; + int nparams = 0; + int type; + + if (!priv->job.completed) + return; + + if (qemuDomainJobInfoToParams(priv->job.completed, &type, + ¶ms, &nparams) < 0) { + VIR_WARN("Could not get stats for completed job; domain %s", + vm->def->name); + } + + event = virDomainEventJobCompletedNewFromObj(vm, params, nparams); + qemuDomainEventQueue(driver, event); +} + + static int qemuDomainObjInitJob(qemuDomainObjPrivatePtr priv) { diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index eceaf66b92757cc9e2e6ed9b6bf2ced2465f43ca..b6f493e5b325f1ac2132518f241fb96b2e795e92 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -265,6 +265,8 @@ void qemuDomainEventFlush(int timer, void *opaque); void qemuDomainEventQueue(virQEMUDriverPtr driver, virObjectEventPtr event); +void qemuDomainEventEmitJobCompleted(virQEMUDriverPtr driver, + virDomainObjPtr vm); int qemuDomainObjBeginJob(virQEMUDriverPtr driver, virDomainObjPtr obj, diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 7cbb228dd3674c60e0a844768f15b8209d5af7e1..38fa81c64306368dcd91f01d96fd1906d017c15d 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -3866,7 +3866,7 @@ qemuMigrationConfirmPhase(virQEMUDriverPtr driver, int retcode) { qemuMigrationCookiePtr mig; - virObjectEventPtr event = NULL; + virObjectEventPtr event; int rv = -1; virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); qemuDomainObjPrivatePtr priv = vm->privateData; @@ -3921,6 +3921,8 @@ qemuMigrationConfirmPhase(virQEMUDriverPtr driver, event = virDomainEventLifecycleNewFromObj(vm, VIR_DOMAIN_EVENT_STOPPED, VIR_DOMAIN_EVENT_STOPPED_MIGRATED); + qemuDomainEventQueue(driver, event); + qemuDomainEventEmitJobCompleted(driver, vm); } else { virErrorPtr orig_err = virSaveLastError(); @@ -3935,6 +3937,7 @@ qemuMigrationConfirmPhase(virQEMUDriverPtr driver, event = virDomainEventLifecycleNewFromObj(vm, VIR_DOMAIN_EVENT_RESUMED, VIR_DOMAIN_EVENT_RESUMED_MIGRATED); + qemuDomainEventQueue(driver, event); } if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0) @@ -3946,7 +3949,6 @@ qemuMigrationConfirmPhase(virQEMUDriverPtr driver, rv = 0; cleanup: - qemuDomainEventQueue(driver, event); virObjectUnref(cfg); return rv; } @@ -6071,6 +6073,7 @@ qemuMigrationToFile(virQEMUDriverPtr driver, virDomainObjPtr vm, if (cmd && virCommandWait(cmd, NULL) < 0) goto cleanup; + qemuDomainEventEmitJobCompleted(driver, vm); ret = 0; cleanup: