On Sun, Nov 30, 2008 at 11:33:06PM +0000, Daniel P. Berrange wrote: > This patch makes the QEMU driver threadsafe with the exception of the > domain events code. > @@ -229,20 +243,22 @@ qemudStartup(void) { [...] > +error: > + if (qemu_driver) > + qemuDriverUnlock(qemu_driver); > VIR_FREE(base); > - VIR_FREE(qemu_driver); > + qemudShutdown(); okay the clean way to free the driver structure > @@ -314,16 +334,16 @@ qemudShutdown(void) { > if (!qemu_driver) > return -1; > > + qemuDriverLock(qemu_driver); > virCapabilitiesFree(qemu_driver->caps); > > /* shutdown active VMs */ > for (i = 0 ; i < qemu_driver->domains.count ; i++) { > virDomainObjPtr dom = qemu_driver->domains.objs[i]; > + virDomainObjLock(dom); > if (virDomainIsActive(dom)) > qemudShutdownVMDaemon(NULL, qemu_driver, dom); > - if (!dom->persistent) > - virDomainRemoveInactive(&qemu_driver->domains, > - dom); > + virDomainObjUnlock(dom); > } > > virDomainObjListFree(&qemu_driver->domains); > @@ -340,6 +360,7 @@ qemudShutdown(void) { > if (qemu_driver->brctl) > brShutdown(qemu_driver->brctl); > > + qemuDriverUnlock(qemu_driver); > VIR_FREE(qemu_driver); > > return 0; We don't remove anymore the non-persistent domain on shutdown ? Is that because we can hook this to the event lifecycle processing ? > @@ -1089,18 +1087,38 @@ qemudDispatchVMEvent(int watch, int fd, [...] > + if (failed || quit) { > + qemudShutdownVMDaemon(NULL, driver, vm); > + qemudDomainEventDispatch(driver, vm, > + VIR_DOMAIN_EVENT_STOPPED, > + quit ? > + VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN : > + VIR_DOMAIN_EVENT_STOPPED_FAILED); > + if (!vm->persistent) { > + virDomainRemoveInactive(&driver->domains, > + vm); > + vm = NULL; > + } > + } seems to be done here now, okay I could not spot anything on the locking side, +1 Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list