On Tue, Dec 02, 2008 at 11:38:36AM +0000, Daniel P. Berrange wrote: > On Mon, Dec 01, 2008 at 12:23:12PM +0100, Gerd v. Egidy wrote: > > Hi Daniel, > > > > > > This patch alone not, but this patch + the one in my first mail > > > > (see > > > > https://www.redhat.com/archives/libvir-list/2008-November/msg00457.html) > > > > together make it work for me. The first patch fixes the autostart order, > > > > the second one adds the necessary conn structure. > > > > > > Oh yes, I totally missed the patch in your first mail. The first patch > > > is definitely correct and I'll apply that shortly. > > > > I just added some documentation (same as in virInitialize) to make sure this > > bug does not get introduced again. New version attached. > > > > > While your second > > > patch is also functionally OK, I'm not entirely happy with creating a > > > connection object deep inside the QEMU driver code. > > > > Yeah, that was exactly my thought too. > > > > > So I'm going to > > > think about whether there's a better way todo that bit. > > > > I looked through the rest of the qemu-initialization and it looks like this is > > the only point where the conn-object is needed. So a solution would be to > > directly access the network driver functions. But on the other hand these > > functions seem all to imply that there is a valid conn available. So we would > > have to change that, at least for the lookup-by-name case. > > I've committed this patch now. I'll send a suggestion for the second patch > shortly... Ok, I think your suggested patch is the best we can manage at this point in time. Here's an update which also handle it for UML driver, and adds a check for NULL on connection open. Daniel Index: src/qemu_driver.c =================================================================== RCS file: /data/cvs/libvirt/src/qemu_driver.c,v retrieving revision 1.162 diff -u -p -r1.162 qemu_driver.c --- src/qemu_driver.c 28 Nov 2008 12:03:20 -0000 1.162 +++ src/qemu_driver.c 2 Dec 2008 11:52:28 -0000 @@ -138,12 +138,26 @@ static struct qemud_driver *qemu_driver static void qemudAutostartConfigs(struct qemud_driver *driver) { unsigned int i; + /* XXX: Figure out a better way todo this. The domain + * startup code needs a connection handle in order + * to lookup the bridge associated with a virtual + * network + */ + virConnectPtr conn = virConnectOpen(getuid() ? + "qemu:///session" : + "qemu:///system"); + + if (!conn) { + qemudLog(QEMUD_ERR, "%s", + _("Cannot autostart domains, failed to open connection")); + return; + } for (i = 0 ; i < driver->domains.count ; i++) { virDomainObjPtr vm = driver->domains.objs[i]; if (vm->autostart && !virDomainIsActive(vm)) { - int ret = qemudStartVMDaemon(NULL, driver, vm, NULL); + int ret = qemudStartVMDaemon(conn, driver, vm, NULL); if (ret < 0) { virErrorPtr err = virGetLastError(); qemudLog(QEMUD_ERR, _("Failed to autostart VM '%s': %s\n"), @@ -155,6 +169,8 @@ qemudAutostartConfigs(struct qemud_drive } } } + + virConnectClose(conn); } /** Index: src/uml_driver.c =================================================================== RCS file: /data/cvs/libvirt/src/uml_driver.c,v retrieving revision 1.6 diff -u -p -r1.6 uml_driver.c --- src/uml_driver.c 2 Dec 2008 11:23:27 -0000 1.6 +++ src/uml_driver.c 2 Dec 2008 11:52:28 -0000 @@ -117,16 +117,32 @@ static struct uml_driver *uml_driver = N static void umlAutostartConfigs(struct uml_driver *driver) { unsigned int i; + /* XXX: Figure out a better way todo this. The domain + * startup code needs a connection handle in order + * to lookup the bridge associated with a virtual + * network + */ + virConnectPtr conn = virConnectOpen(getuid() ? + "uml:///session" : + "uml:///system"); + + if (!conn) { + umlLog(UML_ERR, "%s", + _("Cannot autostart domains, failed to open connection")); + return; + } for (i = 0 ; i < driver->domains.count ; i++) { if (driver->domains.objs[i]->autostart && !virDomainIsActive(driver->domains.objs[i]) && - umlStartVMDaemon(NULL, driver, driver->domains.objs[i]) < 0) { + umlStartVMDaemon(conn, driver, driver->domains.objs[i]) < 0) { virErrorPtr err = virGetLastError(); umlLog(UML_ERR, _("Failed to autostart VM '%s': %s\n"), driver->domains.objs[i]->def->name, err->message); } } + + virConnectClose(conn); } -- |: 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