
Daniel Berrange wrote:
On Tue, May 12, 2009 at 11:36:50AM +0200, Chris Lalancette wrote:
All, Even with Guido/Pritesh's recent changes to the vbox open routine, the auto-detection in libvirt is currently broken. What happens is that in src/libvirt.c:do_open(), at the start of the loop to auto-detect drivers, ret->uri is NULL. As each driver declines, it remains NULL. However, the very first thing the vboxOpen() routine does is:
if (conn->uri == NULL) { conn->uri = xmlParseURI(uid ? "vbox:///session" : "vbox:///system"); if (conn->uri == NULL) { return VIR_DRV_OPEN_ERROR; }
So, any driver that is trying to auto-probe after vboxOpen sees a conn->uri with a scheme of vbox and a path of system/session, and they all fail (including Qemu, which is what I'm mostly concerned with at the moment).
Please re-test with the patch I posted yesterday
http://www.redhat.com/archives/libvir-list/2009-May/msg00198.html
In point of fact, this whole auto-detection thing is fragile. We got away with it before because the qemuOpen() routine bombs out before doing the whole conn->uri == NULL check, but in general, it's very easy for one buggy driver to mess up auto-detection for all drivers.
The general rule is that a driver should not set conn->uri to non-NULL until *after* it has determined that it can handle it.
The problem here was that virtualbox driver was setting the uri to non-NULL, and only then seeing if virtalbox was available. My patch fixes that logic ordering bug
Yeah, that seems to fix it for me. It would still be nice to make it a little less error-prone, but I don't have any good ideas at the moment. Thanks! -- Chris Lalancette