mirror of https://gitee.com/openkylin/libvirt.git
qemuDomainOpenGraphics: Start job early
Checking if a domain's definition or if it is active before we got a job is pointless since the domain might have changed in the meantime. Luckily libvirtd didn't crash when the API tried to talk to an inactive domain: debug : qemuDomainObjBeginJobInternal:2914 : Started job: modify (async=none vm=0x7f8f340140c0 name=ble) debug : qemuDomainObjEnterMonitorInternal:3137 : Entering monitor (mon=(nil) vm=0x7f8f340140c0 name=ble) warning : virObjectLock:319 : Object (nil) ((unknown)) is not a virObjectLockable instance debug : qemuMonitorOpenGraphics:3505 : protocol=spice fd=27 fdname=graphicsfd skipauth=1 error : qemuMonitorOpenGraphics:3508 : invalid argument: monitor must not be NULL debug : qemuDomainObjExitMonitorInternal:3160 : Exited monitor (mon=(nil) vm=0x7f8f340140c0 name=ble) debug : qemuDomainObjEndJob:3068 : Stopping job: modify (async=none vm=0x7f8f340140c0 name=ble) Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
parent
eff8f77255
commit
53ae58b0ed
|
@ -17118,10 +17118,13 @@ qemuDomainOpenGraphics(virDomainPtr dom,
|
||||||
if (virDomainOpenGraphicsEnsureACL(dom->conn, vm->def) < 0)
|
if (virDomainOpenGraphicsEnsureACL(dom->conn, vm->def) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
if (!virDomainObjIsActive(vm)) {
|
if (!virDomainObjIsActive(vm)) {
|
||||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
virReportError(VIR_ERR_OPERATION_INVALID,
|
||||||
"%s", _("domain is not running"));
|
"%s", _("domain is not running"));
|
||||||
goto cleanup;
|
goto endjob;
|
||||||
}
|
}
|
||||||
|
|
||||||
priv = vm->privateData;
|
priv = vm->privateData;
|
||||||
|
@ -17129,7 +17132,7 @@ qemuDomainOpenGraphics(virDomainPtr dom,
|
||||||
if (idx >= vm->def->ngraphics) {
|
if (idx >= vm->def->ngraphics) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("No graphics backend with index %d"), idx);
|
_("No graphics backend with index %d"), idx);
|
||||||
goto cleanup;
|
goto endjob;
|
||||||
}
|
}
|
||||||
switch (vm->def->graphics[idx]->type) {
|
switch (vm->def->graphics[idx]->type) {
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
|
case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
|
||||||
|
@ -17142,20 +17145,20 @@ qemuDomainOpenGraphics(virDomainPtr dom,
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
_("Can only open VNC or SPICE graphics backends, not %s"),
|
_("Can only open VNC or SPICE graphics backends, not %s"),
|
||||||
virDomainGraphicsTypeToString(vm->def->graphics[idx]->type));
|
virDomainGraphicsTypeToString(vm->def->graphics[idx]->type));
|
||||||
goto cleanup;
|
goto endjob;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (virSecurityManagerSetImageFDLabel(driver->securityManager, vm->def,
|
if (virSecurityManagerSetImageFDLabel(driver->securityManager, vm->def,
|
||||||
fd) < 0)
|
fd) < 0)
|
||||||
goto cleanup;
|
goto endjob;
|
||||||
|
|
||||||
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
qemuDomainObjEnterMonitor(driver, vm);
|
qemuDomainObjEnterMonitor(driver, vm);
|
||||||
ret = qemuMonitorOpenGraphics(priv->mon, protocol, fd, "graphicsfd",
|
ret = qemuMonitorOpenGraphics(priv->mon, protocol, fd, "graphicsfd",
|
||||||
(flags & VIR_DOMAIN_OPEN_GRAPHICS_SKIPAUTH) != 0);
|
(flags & VIR_DOMAIN_OPEN_GRAPHICS_SKIPAUTH) != 0);
|
||||||
if (qemuDomainObjExitMonitor(driver, vm) < 0)
|
if (qemuDomainObjExitMonitor(driver, vm) < 0)
|
||||||
ret = -1;
|
ret = -1;
|
||||||
|
|
||||||
|
endjob:
|
||||||
qemuDomainObjEndJob(driver, vm);
|
qemuDomainObjEndJob(driver, vm);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
|
Loading…
Reference in New Issue