On Tue, Aug 16, 2011 at 18:39:12 +0200, Michal Privoznik wrote: > If libvirt daemon gets restarted and there is (at least) one > unresponsive qemu, the startup procedure hangs up. This patch creates > one thread per vm in which we try to reconnect to monitor. Therefore, > blocking in one thread will not affect other APIs. > --- > src/qemu/qemu_driver.c | 23 +++--------- > src/qemu/qemu_process.c | 87 ++++++++++++++++++++++++++++++++++++++++++---- > 2 files changed, 85 insertions(+), 25 deletions(-) > > diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c > index 421a98e..4574b6c 100644 > --- a/src/qemu/qemu_driver.c > +++ b/src/qemu/qemu_driver.c > @@ -143,26 +143,15 @@ qemuAutostartDomain(void *payload, const void *name ATTRIBUTE_UNUSED, void *opaq > > virDomainObjLock(vm); > virResetLastError(); > - if (qemuDomainObjBeginJobWithDriver(data->driver, vm, > - QEMU_JOB_MODIFY) < 0) { > + if (vm->autostart && > + !virDomainObjIsActive(vm) && > + qemuDomainObjStart(data->conn, data->driver, vm, > + false, false, > + data->driver->autoStartBypassCache) < 0) { > err = virGetLastError(); > - VIR_ERROR(_("Failed to start job on VM '%s': %s"), > + VIR_ERROR(_("Failed to autostart VM '%s': %s"), > vm->def->name, > err ? err->message : _("unknown error")); > - } else { > - if (vm->autostart && > - !virDomainObjIsActive(vm) && > - qemuDomainObjStart(data->conn, data->driver, vm, > - false, false, > - data->driver->autoStartBypassCache) < 0) { > - err = virGetLastError(); > - VIR_ERROR(_("Failed to autostart VM '%s': %s"), > - vm->def->name, > - err ? err->message : _("unknown error")); > - } > - > - if (qemuDomainObjEndJob(data->driver, vm) == 0) > - vm = NULL; > } I think this is wrong. qemuDomainObjStart expect the job to be set so that it can enter qemu monitor. The patch should just move the if (vm->autostrt && !virDomainObjIsActive(vm)) check before BeginJob so that a job is started only if we're going to do something with the domain. Jirka -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list