
On 05/02/2013 12:22 PM, Eric Blake wrote:
On 05/02/2013 12:06 PM, Laine Stump wrote:
This should resolve https://bugzilla.redhat.com/show_bug.cgi?id=958907
Recent new addition of code to read/write active network state to the NETWORK_STATE_DIR in the network driver broke startup for qemu:///session. The network driver had several state file paths hardcoded to /var, which could never possibly work in session mode.
-#define NETWORK_PID_DIR LOCALSTATEDIR "/run/libvirt/network"
So previously, this constant represented the network runtime directory relative to the configured state dir (default /var in a distro installation)...
-#define NETWORK_STATE_DIR LOCALSTATEDIR "/lib/libvirt/network" +#define NETWORK_PID_DIR "/run/libvirt/network"
Now it is just the relative suffix of an (as-yet) unspecified prefix...
Oh, one more thing. I would write this as "run/libvirt/network" to make it obvious it will be relative to some other directory...
if (privileged) { - if (virAsprintf(&driverState->logDir, - "%s/log/libvirt/qemu", LOCALSTATEDIR) == -1) - goto out_of_memory; - - if ((base = strdup(SYSCONFDIR "/libvirt")) == NULL) + if (((base = strdup(SYSCONFDIR "/libvirt")) == NULL) || + ((driverState->logDir + = strdup(LOCALSTATEDIR "/log/libvirt/qemu")) == NULL) || + ((driverState->stateDir + = strdup(LOCALSTATEDIR NETWORK_STATE_DIR)) == NULL) ||
...privileged initialization uses LOCALSTATEDIR as its location where the now-relative NETWORK_STATE_DIR is placed,...[1]
and here initialize it as strdup(LOCALSTATEDIR "/" NETWORK_STATE_DIR), to make it obvious that we are pasting a directory and a relative path. (My eyes kind of gloss over ' ' vs. '_', but a "/" in the middle is easier to spot). -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org