if (VIR_ALLOC(network_driver) < 0)
goto error;
+ network_driver->lockFD = -1;
if (virMutexInit(&network_driver->lock) < 0) {
VIR_FREE(network_driver);
goto error;
goto error;
}
+ if ((network_driver->lockFD =
+ virPidFileAcquire(network_driver->stateDir, "driver",
+ true, getpid())) < 0)
+ goto error;
+
/* if this fails now, it will be retried later with dnsmasqCapsRefresh() */
network_driver->dnsmasqCaps = dnsmasqCapsNewFromBinary(DNSMASQ);
/* free inactive networks */
virObjectUnref(network_driver->networks);
+ if (network_driver->lockFD != -1)
+ virPidFileRelease(network_driver->stateDir, "driver",
+ network_driver->lockFD);
+
VIR_FREE(network_driver->networkConfigDir);
VIR_FREE(network_driver->networkAutostartDir);
VIR_FREE(network_driver->stateDir);
/* Read-only */
bool privileged;
+ /* pid file FD, ensures two copies of the driver can't use the same root */
+ int lockFD;
+
/* Immutable pointer, self-locking APIs */
virNetworkObjListPtr networks;