On Fri, Oct 17, 2008 at 07:53:06AM -0700, Dan Smith wrote: > DB> @@ -104,8 +117,12 @@ static virDomainPtr lxcDomainLookupByID( > DB> int id) > DB> { > DB> lxc_driver_t *driver = (lxc_driver_t *)conn->privateData; > DB> - virDomainObjPtr vm = virDomainFindByID(&driver->domains, id); > DB> + virDomainObjPtr vm; > DB> virDomainPtr dom; > DB> + > DB> + lxcDriverLock(driver); > DB> + vm = virDomainFindByID(&driver->domains, id); > DB> + lxcDriverUnlock(driver); > > DB> if (!vm) { > DB> lxcError(conn, NULL, VIR_ERR_NO_DOMAIN, NULL); > DB> @@ -117,6 +134,7 @@ static virDomainPtr lxcDomainLookupByID( > dom-> id = vm->def->id; > DB> } > > DB> + virDomainUnlock(vm); > DB> return dom; > DB> } > > Can you explain why you're unlocking the vm in all of these functions > without first the corresponding lock operation? You didn't read the previous mail in this sequence :-P http://www.redhat.com/archives/libvir-list/2008-October/msg00419.html [quote] * Domain lookup methods virDomainObjPtr virDomainFindByID(const virDomainObjListPtr doms, int id); virDomainObjPtr virDomainFindByUUID(const virDomainObjListPtr doms, const unsigned char *uuid); virDomainObjPtr virDomainFindByName(const virDomainObjListPtr doms, const char *name); The driver must hold its global lock to protect the virDomainObjListPtr object. The returned virDomainObjPtr instance will be locked at which point the driver can optionall release its global lock [/quote] > > DB> @@ -1091,17 +1230,20 @@ static int lxcShutdown(void) > DB> */ > DB> static int > DB> lxcActive(void) { > DB> - unsigned int i; > DB> + unsigned int i, active = 0; > > DB> if (lxc_driver == NULL) > DB> return(0); > > DB> - for (i = 0 ; i < lxc_driver->domains.count ; i++) > DB> + lxcDriverLock(lxc_driver); > DB> + for (i = 0 ; i < lxc_driver->domains.count ; i++) { > DB> + virDomainLock(lxc_driver->domains.objs[i]); > DB> if (virDomainIsActive(lxc_driver->domains.objs[i])) > DB> - return 1; > DB> + active = 1; > DB> + virDomainUnlock(lxc_driver->domains.objs[i]); > DB> + } > > DB> - /* Otherwise we're happy to deal with a shutdown */ > DB> - return 0; > DB> + return active; > DB> } > > It looks to me like you're taking the driver lock and not releasing it > on exit. Yes, well spotted. Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list