#define VIR_FROM_THIS VIR_FROM_LXC
+static virClassPtr virLXCDriverConfigClass;
+static void virLXCDriverConfigDispose(void *obj);
+
+static int virLXCConfigOnceInit(void)
+{
+ if (!(virLXCDriverConfigClass = virClassNew(virClassForObject(),
+ "virLXCDriverConfig",
+ sizeof(virLXCDriverConfig),
+ virLXCDriverConfigDispose)))
+ return -1;
+
+ return 0;
+}
+
+VIR_ONCE_GLOBAL_INIT(virLXCConfig)
+
/* Functions */
virCapsPtr lxcCapsInit(virLXCDriverPtr driver)
}
-int lxcLoadDriverConfig(virLXCDriverPtr driver)
+virLXCDriverConfigPtr
+virLXCDriverConfigNew(void)
{
- char *filename;
- virConfPtr conf;
- virConfValuePtr p;
+ virLXCDriverConfigPtr cfg;
+
+ if (virLXCConfigInitialize() < 0)
+ return NULL;
- driver->securityDefaultConfined = false;
- driver->securityRequireConfined = false;
+ if (!(cfg = virObjectNew(virLXCDriverConfigClass)))
+ return NULL;
+
+ cfg->securityDefaultConfined = false;
+ cfg->securityRequireConfined = false;
/* Set the container configuration directory */
- if (VIR_STRDUP(driver->configDir, LXC_CONFIG_DIR) < 0)
+ if (VIR_STRDUP(cfg->configDir, LXC_CONFIG_DIR) < 0)
goto error;
- if (VIR_STRDUP(driver->stateDir, LXC_STATE_DIR) < 0)
+ if (VIR_STRDUP(cfg->stateDir, LXC_STATE_DIR) < 0)
goto error;
- if (VIR_STRDUP(driver->logDir, LXC_LOG_DIR) < 0)
+ if (VIR_STRDUP(cfg->logDir, LXC_LOG_DIR) < 0)
goto error;
- if (VIR_STRDUP(driver->autostartDir, LXC_AUTOSTART_DIR) < 0)
+ if (VIR_STRDUP(cfg->autostartDir, LXC_AUTOSTART_DIR) < 0)
goto error;
+ return cfg;
+error:
+ virObjectUnref(cfg);
+ return NULL;
+}
- if (VIR_STRDUP(filename, SYSCONFDIR "/libvirt/lxc.conf") < 0)
- goto error;
+int
+virLXCLoadDriverConfig(virLXCDriverConfigPtr cfg,
+ const char *filename)
+{
+ virConfPtr conf;
+ virConfValuePtr p;
/* Avoid error from non-existant or unreadable file. */
if (access(filename, R_OK) == -1)
p = virConfGetValue(conf, "log_with_libvirtd");
CHECK_TYPE("log_with_libvirtd", VIR_CONF_LONG);
- if (p) driver->log_libvirtd = p->l;
+ if (p) cfg->log_libvirtd = p->l;
p = virConfGetValue(conf, "security_driver");
CHECK_TYPE("security_driver", VIR_CONF_STRING);
if (p && p->str) {
- if (VIR_STRDUP(driver->securityDriverName, p->str) < 0) {
+ if (VIR_STRDUP(cfg->securityDriverName, p->str) < 0) {
virConfFree(conf);
return -1;
}
p = virConfGetValue(conf, "security_default_confined");
CHECK_TYPE("security_default_confined", VIR_CONF_LONG);
- if (p) driver->securityDefaultConfined = p->l;
+ if (p) cfg->securityDefaultConfined = p->l;
p = virConfGetValue(conf, "security_require_confined");
CHECK_TYPE("security_require_confined", VIR_CONF_LONG);
- if (p) driver->securityRequireConfined = p->l;
+ if (p) cfg->securityRequireConfined = p->l;
#undef CHECK_TYPE
virConfFree(conf);
done:
- VIR_FREE(filename);
return 0;
+}
-error:
- return -1;
+virLXCDriverConfigPtr virLXCDriverGetConfig(virLXCDriverPtr driver)
+{
+ return virObjectRef(driver->config);
+}
+
+static void
+virLXCDriverConfigDispose(void *obj)
+{
+ virLXCDriverConfigPtr cfg = obj;
+
+ VIR_FREE(cfg->configDir);
+ VIR_FREE(cfg->autostartDir);
+ VIR_FREE(cfg->stateDir);
+ VIR_FREE(cfg->logDir);
+ VIR_FREE(cfg->securityDriverName);
}
virDomainPtr dom = NULL;
virDomainEventPtr event = NULL;
virDomainDefPtr oldDef = NULL;
+ virLXCDriverConfigPtr cfg = NULL;
lxcDriverLock(driver);
+ cfg = virLXCDriverGetConfig(driver);
+
if (!(def = virDomainDefParseString(xml, driver->caps, driver->xmlopt,
1 << VIR_DOMAIN_VIRT_LXC,
VIR_DOMAIN_XML_INACTIVE)))
if (virSecurityManagerVerify(driver->securityManager, def) < 0)
goto cleanup;
- if ((def->nets != NULL) && !(driver->have_netns)) {
+ if ((def->nets != NULL) && !(cfg->have_netns)) {
virReportError(VIR_ERR_OPERATION_INVALID,
"%s", _("System lacks NETNS support"));
goto cleanup;
def = NULL;
vm->persistent = 1;
- if (virDomainSaveConfig(driver->configDir,
+ if (virDomainSaveConfig(cfg->configDir,
vm->newDef ? vm->newDef : vm->def) < 0) {
virDomainObjListRemove(driver->domains, vm);
vm = NULL;
if (event)
virDomainEventStateQueue(driver->domainEventState, event);
lxcDriverUnlock(driver);
+ virObjectUnref(cfg);
return dom;
}
virDomainObjPtr vm;
virDomainEventPtr event = NULL;
int ret = -1;
+ virLXCDriverConfigPtr cfg = NULL;
virCheckFlags(0, -1);
lxcDriverLock(driver);
+ cfg = virLXCDriverGetConfig(driver);
+
vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
if (!vm) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
goto cleanup;
}
- if (virDomainDeleteConfig(driver->configDir,
- driver->autostartDir,
+ if (virDomainDeleteConfig(cfg->configDir,
+ cfg->autostartDir,
vm) < 0)
goto cleanup;
if (event)
virDomainEventStateQueue(driver->domainEventState, event);
lxcDriverUnlock(driver);
+ virObjectUnref(cfg);
return ret;
}
virDomainObjPtr vm;
virDomainEventPtr event = NULL;
int ret = -1;
+ virLXCDriverConfigPtr cfg = NULL;
virCheckFlags(VIR_DOMAIN_START_AUTODESTROY, -1);
lxcDriverLock(driver);
+ cfg = virLXCDriverGetConfig(driver);
+
vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
if (!vm) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
if (virDomainCreateWithFilesEnsureACL(dom->conn, vm->def) < 0)
goto cleanup;
- if ((vm->def->nets != NULL) && !(driver->have_netns)) {
+ if ((vm->def->nets != NULL) && !(cfg->have_netns)) {
virReportError(VIR_ERR_OPERATION_INVALID,
"%s", _("System lacks NETNS support"));
goto cleanup;
if (event)
virDomainEventStateQueue(driver->domainEventState, event);
lxcDriverUnlock(driver);
+ virObjectUnref(cfg);
return ret;
}
virDomainDefPtr def;
virDomainPtr dom = NULL;
virDomainEventPtr event = NULL;
+ virLXCDriverConfigPtr cfg = NULL;
virCheckFlags(VIR_DOMAIN_START_AUTODESTROY, NULL);
lxcDriverLock(driver);
+ cfg = virLXCDriverGetConfig(driver);
+
if (!(def = virDomainDefParseString(xml, driver->caps, driver->xmlopt,
1 << VIR_DOMAIN_VIRT_LXC,
VIR_DOMAIN_XML_INACTIVE)))
if (virSecurityManagerVerify(driver->securityManager, def) < 0)
goto cleanup;
- if ((def->nets != NULL) && !(driver->have_netns)) {
+ if ((def->nets != NULL) && !(cfg->have_netns)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
"%s", _("System lacks NETNS support"));
goto cleanup;
if (event)
virDomainEventStateQueue(driver->domainEventState, event);
lxcDriverUnlock(driver);
+ virObjectUnref(cfg);
return dom;
}
}
-static int
-lxcSecurityInit(virLXCDriverPtr driver)
+static virSecurityManagerPtr
+lxcSecurityInit(virLXCDriverConfigPtr cfg)
{
- VIR_INFO("lxcSecurityInit %s", driver->securityDriverName);
- virSecurityManagerPtr mgr = virSecurityManagerNew(driver->securityDriverName,
+ VIR_INFO("lxcSecurityInit %s", cfg->securityDriverName);
+ virSecurityManagerPtr mgr = virSecurityManagerNew(cfg->securityDriverName,
LXC_DRIVER_NAME,
false,
- driver->securityDefaultConfined,
- driver->securityRequireConfined);
+ cfg->securityDefaultConfined,
+ cfg->securityRequireConfined);
if (!mgr)
goto error;
- driver->securityManager = mgr;
-
- return 0;
+ return mgr;
error:
VIR_ERROR(_("Failed to initialize security drivers"));
virObjectUnref(mgr);
- return -1;
+ return NULL;
}
void *opaque ATTRIBUTE_UNUSED)
{
char *ld;
+ virLXCDriverConfigPtr cfg = NULL;
/* Valgrind gets very annoyed when we clone containers, so
* disable LXC when under valgrind
lxc_driver->hostsysinfo = virSysinfoRead();
- lxc_driver->log_libvirtd = 0; /* by default log to container logfile */
- lxc_driver->have_netns = lxcCheckNetNsSupport();
+ if (!(lxc_driver->config = cfg = virLXCDriverConfigNew()))
+ goto cleanup;
+
+ cfg->log_libvirtd = 0; /* by default log to container logfile */
+ cfg->have_netns = lxcCheckNetNsSupport();
/* Call function to load lxc driver configuration information */
- if (lxcLoadDriverConfig(lxc_driver) < 0)
+ if (virLXCLoadDriverConfig(cfg, SYSCONFDIR "/libvirt/lxc.conf") < 0)
goto cleanup;
- if (lxcSecurityInit(lxc_driver) < 0)
+ if (!(lxc_driver->securityManager = lxcSecurityInit(cfg)))
goto cleanup;
if ((lxc_driver->activeUsbHostdevs = virUSBDeviceListNew()) == NULL)
/* Get all the running persistent or transient configs first */
if (virDomainObjListLoadAllConfigs(lxc_driver->domains,
- lxc_driver->stateDir,
+ cfg->stateDir,
NULL, 1,
lxc_driver->caps,
lxc_driver->xmlopt,
/* Then inactive persistent configs */
if (virDomainObjListLoadAllConfigs(lxc_driver->domains,
- lxc_driver->configDir,
- lxc_driver->autostartDir, 0,
+ cfg->configDir,
+ cfg->autostartDir, 0,
lxc_driver->caps,
lxc_driver->xmlopt,
1 << VIR_DOMAIN_VIRT_LXC,
*/
static int
lxcStateReload(void) {
+ virLXCDriverConfigPtr cfg = NULL;
+
if (!lxc_driver)
return 0;
lxcDriverLock(lxc_driver);
+ cfg = virLXCDriverGetConfig(lxc_driver);
+
virDomainObjListLoadAllConfigs(lxc_driver->domains,
- lxc_driver->configDir,
- lxc_driver->autostartDir, 0,
+ cfg->configDir,
+ cfg->autostartDir, 0,
lxc_driver->caps,
lxc_driver->xmlopt,
1 << VIR_DOMAIN_VIRT_LXC,
lxcNotifyLoadDomain, lxc_driver);
lxcDriverUnlock(lxc_driver);
-
+ virObjectUnref(cfg);
return 0;
}
virObjectUnref(lxc_driver->caps);
virObjectUnref(lxc_driver->securityManager);
virObjectUnref(lxc_driver->xmlopt);
- VIR_FREE(lxc_driver->configDir);
- VIR_FREE(lxc_driver->autostartDir);
- VIR_FREE(lxc_driver->stateDir);
- VIR_FREE(lxc_driver->logDir);
+ virObjectUnref(lxc_driver->config);
lxcDriverUnlock(lxc_driver);
virMutexDestroy(&lxc_driver->lock);
VIR_FREE(lxc_driver);
int ret = -1;
int rc;
virLXCDomainObjPrivatePtr priv;
+ virLXCDriverConfigPtr cfg = NULL;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
VIR_DOMAIN_AFFECT_CONFIG, -1);
lxcDriverLock(driver);
+ cfg = virLXCDriverGetConfig(driver);
+
vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
if (vm == NULL) {
}
}
- if (virDomainSaveStatus(driver->xmlopt, driver->stateDir, vm) < 0)
+ if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0)
goto cleanup;
if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
- rc = virDomainSaveConfig(driver->configDir, vmdef);
+ rc = virDomainSaveConfig(cfg->configDir, vmdef);
if (rc < 0)
goto cleanup;
if (vm)
virObjectUnlock(vm);
lxcDriverUnlock(driver);
+ virObjectUnref(cfg);
return ret;
}
virDomainDefPtr persistentDef = NULL;
int ret = -1;
virLXCDomainObjPrivatePtr priv;
+ virLXCDriverConfigPtr cfg = NULL;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
VIR_DOMAIN_AFFECT_CONFIG, -1);
lxcDriverLock(driver);
+ cfg = virLXCDriverGetConfig(driver);
+
vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
if (vm == NULL) {
}
}
- if (virDomainSaveConfig(driver->configDir, persistentDef) < 0)
+ if (virDomainSaveConfig(cfg->configDir, persistentDef) < 0)
goto cleanup;
}
if (vm)
virObjectUnlock(vm);
lxcDriverUnlock(driver);
+ virObjectUnref(cfg);
return ret;
}
}
static int lxcDomainSetAutostart(virDomainPtr dom,
- int autostart) {
+ int autostart)
+{
virLXCDriverPtr driver = dom->conn->privateData;
virDomainObjPtr vm;
char *configFile = NULL, *autostartLink = NULL;
int ret = -1;
+ virLXCDriverConfigPtr cfg = NULL;
lxcDriverLock(driver);
+ cfg = virLXCDriverGetConfig(driver);
+
vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
if (!vm) {
goto cleanup;
}
- configFile = virDomainConfigFile(driver->configDir,
+ configFile = virDomainConfigFile(cfg->configDir,
vm->def->name);
if (configFile == NULL)
goto cleanup;
- autostartLink = virDomainConfigFile(driver->autostartDir,
+ autostartLink = virDomainConfigFile(cfg->autostartDir,
vm->def->name);
if (autostartLink == NULL)
goto cleanup;
if (autostart) {
- if (virFileMakePath(driver->autostartDir) < 0) {
+ if (virFileMakePath(cfg->autostartDir) < 0) {
virReportSystemError(errno,
_("Cannot create autostart directory %s"),
- driver->autostartDir);
+ cfg->autostartDir);
goto cleanup;
}
if (vm)
virObjectUnlock(vm);
lxcDriverUnlock(driver);
+ virObjectUnref(cfg);
return ret;
}
virDomainObjPtr vm;
virDomainEventPtr event = NULL;
int ret = -1;
+ virLXCDriverConfigPtr cfg = NULL;
lxcDriverLock(driver);
+ cfg = virLXCDriverGetConfig(driver);
+
vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
if (!vm) {
VIR_DOMAIN_EVENT_SUSPENDED_PAUSED);
}
- if (virDomainSaveStatus(driver->xmlopt, driver->stateDir, vm) < 0)
+ if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0)
goto cleanup;
ret = 0;
if (vm)
virObjectUnlock(vm);
lxcDriverUnlock(driver);
+ virObjectUnref(cfg);
return ret;
}
virDomainEventPtr event = NULL;
int ret = -1;
virLXCDomainObjPrivatePtr priv;
+ virLXCDriverConfigPtr cfg = NULL;
lxcDriverLock(driver);
+ cfg = virLXCDriverGetConfig(driver);
+
vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
if (!vm) {
VIR_DOMAIN_EVENT_RESUMED_UNPAUSED);
}
- if (virDomainSaveStatus(driver->xmlopt, driver->stateDir, vm) < 0)
+ if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0)
goto cleanup;
ret = 0;
if (vm)
virObjectUnlock(vm);
lxcDriverUnlock(driver);
+ virObjectUnref(cfg);
return ret;
}
virDomainDeviceDefPtr dev = NULL, dev_copy = NULL;
int ret = -1;
unsigned int affect;
+ virLXCDriverConfigPtr cfg = NULL;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
VIR_DOMAIN_AFFECT_CONFIG, -1);
affect = flags & (VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG);
lxcDriverLock(driver);
+ cfg = virLXCDriverGetConfig(driver);
+
vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
if (!vm) {
* changed even if we failed to attach the device. For example,
* a new controller may be created.
*/
- if (virDomainSaveStatus(driver->xmlopt, driver->stateDir, vm) < 0) {
+ if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0) {
ret = -1;
goto cleanup;
}
/* Finally, if no error until here, we can save config. */
if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
- ret = virDomainSaveConfig(driver->configDir, vmdef);
+ ret = virDomainSaveConfig(cfg->configDir, vmdef);
if (!ret) {
virDomainObjAssignDef(vm, vmdef, false, NULL);
vmdef = NULL;
if (vm)
virObjectUnlock(vm);
lxcDriverUnlock(driver);
+ virObjectUnref(cfg);
return ret;
}
virDomainDeviceDefPtr dev = NULL, dev_copy = NULL;
int ret = -1;
unsigned int affect;
+ virLXCDriverConfigPtr cfg = NULL;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
VIR_DOMAIN_AFFECT_CONFIG |
affect = flags & (VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG);
lxcDriverLock(driver);
+ cfg = virLXCDriverGetConfig(driver);
+
vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
if (!vm) {
/* Finally, if no error until here, we can save config. */
if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
- ret = virDomainSaveConfig(driver->configDir, vmdef);
+ ret = virDomainSaveConfig(cfg->configDir, vmdef);
if (!ret) {
virDomainObjAssignDef(vm, vmdef, false, NULL);
vmdef = NULL;
if (vm)
virObjectUnlock(vm);
lxcDriverUnlock(driver);
+ virObjectUnref(cfg);
return ret;
}
virDomainDeviceDefPtr dev = NULL, dev_copy = NULL;
int ret = -1;
unsigned int affect;
+ virLXCDriverConfigPtr cfg = NULL;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
VIR_DOMAIN_AFFECT_CONFIG, -1);
affect = flags & (VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG);
lxcDriverLock(driver);
+ cfg = virLXCDriverGetConfig(driver);
+
vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
if (!vm) {
* changed even if we failed to attach the device. For example,
* a new controller may be created.
*/
- if (virDomainSaveStatus(driver->xmlopt, driver->stateDir, vm) < 0) {
+ if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0) {
ret = -1;
goto cleanup;
}
/* Finally, if no error until here, we can save config. */
if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
- ret = virDomainSaveConfig(driver->configDir, vmdef);
+ ret = virDomainSaveConfig(cfg->configDir, vmdef);
if (!ret) {
virDomainObjAssignDef(vm, vmdef, false, NULL);
vmdef = NULL;
if (vm)
virObjectUnlock(vm);
lxcDriverUnlock(driver);
+ virObjectUnref(cfg);
return ret;
}
size_t i;
virLXCDomainObjPrivatePtr priv = vm->privateData;
virNetDevVPortProfilePtr vport = NULL;
+ virLXCDriverConfigPtr cfg = virLXCDriverGetConfig(driver);
VIR_DEBUG("Stopping VM name=%s pid=%d reason=%d",
vm->def->name, (int)vm->pid, (int)reason);
priv->monitor = NULL;
}
- virPidFileDelete(driver->stateDir, vm->def->name);
- virDomainDeleteConfig(driver->stateDir, NULL, vm);
+ virPidFileDelete(cfg->stateDir, vm->def->name);
+ virDomainDeleteConfig(cfg->stateDir, NULL, vm);
virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF, reason);
vm->pid = -1;
vm->def->id = -1;
vm->newDef = NULL;
}
+ virObjectUnref(cfg);
}
virLXCDriverPtr driver = conn->privateData;
virNetDevBandwidthPtr bw;
virNetDevVPortProfilePtr prof;
+ virLXCDriverConfigPtr cfg = virLXCDriverGetConfig(driver);
/* XXX how todo bandwidth controls ?
* Since the 'net-ifname' is about to be moved to a different
virDomainNetGetActualVirtPortProfile(net),
&res_ifname,
VIR_NETDEV_VPORT_PROFILE_OP_CREATE,
- driver->stateDir,
+ cfg->stateDir,
virDomainNetGetActualBandwidth(net)) < 0)
goto cleanup;
ret = res_ifname;
cleanup:
+ virObjectUnref(cfg);
return ret;
}
{
virLXCDriverPtr driver = lxc_driver;
virLXCDomainObjPrivatePtr priv;
+ virLXCDriverConfigPtr cfg;
ino_t inode;
lxcDriverLock(driver);
virObjectLock(vm);
+ cfg = virLXCDriverGetConfig(driver);
lxcDriverUnlock(driver);
priv = vm->privateData;
}
virDomainAuditInit(vm, initpid, inode);
- if (virDomainSaveStatus(lxc_driver->xmlopt, lxc_driver->stateDir, vm) < 0)
+ if (virDomainSaveStatus(lxc_driver->xmlopt, cfg->stateDir, vm) < 0)
VIR_WARN("Cannot update XML with PID for LXC %s", vm->def->name);
virObjectUnlock(vm);
+ virObjectUnref(cfg);
}
static virLXCMonitorCallbacks monitorCallbacks = {
virDomainObjPtr vm)
{
virLXCMonitorPtr monitor = NULL;
+ virLXCDriverConfigPtr cfg = virLXCDriverGetConfig(driver);
if (virSecurityManagerSetSocketLabel(driver->securityManager, vm->def) < 0)
goto cleanup;
* deleted while the monitor is active */
virObjectRef(vm);
- monitor = virLXCMonitorNew(vm, driver->stateDir, &monitorCallbacks);
+ monitor = virLXCMonitorNew(vm, cfg->stateDir, &monitorCallbacks);
if (monitor == NULL)
virObjectUnref(vm);
}
cleanup:
+ virObjectUnref(cfg);
return monitor;
}
char *filterstr;
char *outputstr;
virCommandPtr cmd;
+ virLXCDriverConfigPtr cfg = virLXCDriverGetConfig(driver);
cmd = virCommandNew(vm->def->emulator);
VIR_FREE(filterstr);
}
- if (driver->log_libvirtd) {
+ if (cfg->log_libvirtd) {
if (virLogGetNbOutputs() > 0) {
outputstr = virLogGetOutputs();
if (!outputstr) {
return cmd;
cleanup:
virCommandFree(cmd);
+ virObjectUnref(cfg);
return NULL;
}
virCommandPtr cmd = NULL;
virLXCDomainObjPrivatePtr priv = vm->privateData;
virErrorPtr err = NULL;
+ virLXCDriverConfigPtr cfg = virLXCDriverGetConfig(driver);
virCgroupFree(&priv->cgroup);
return -1;
}
- if (virFileMakePath(driver->logDir) < 0) {
+ if (virFileMakePath(cfg->logDir) < 0) {
virReportSystemError(errno,
_("Cannot create log directory '%s'"),
- driver->logDir);
+ cfg->logDir);
return -1;
}
if (virAsprintf(&logfile, "%s/%s.log",
- driver->logDir, vm->def->name) < 0)
+ cfg->logDir, vm->def->name) < 0)
return -1;
/* Do this up front, so any part of the startup process can add
goto cleanup;
/* Save the configuration for the controller */
- if (virDomainSaveConfig(driver->stateDir, vm->def) < 0)
+ if (virDomainSaveConfig(cfg->stateDir, vm->def) < 0)
goto cleanup;
if ((logfd = open(logfile, O_WRONLY | O_APPEND | O_CREAT,
goto cleanup;
/* And get its pid */
- if ((r = virPidFileRead(driver->stateDir, vm->def->name, &vm->pid)) < 0) {
+ if ((r = virPidFileRead(cfg->stateDir, vm->def->name, &vm->pid)) < 0) {
char out[1024];
if (virLXCProcessReadLogOutput(vm, logfile, pos, out, 1024) > 0)
else
virReportSystemError(-r,
_("Failed to read pid file %s/%s.pid"),
- driver->stateDir, vm->def->name);
+ cfg->stateDir, vm->def->name);
goto cleanup;
}
* location for the benefit of libvirt_lxc. We're now overwriting
* it with the live status XML instead. This is a (currently
* harmless) inconsistency we should fix one day */
- if (virDomainSaveStatus(driver->xmlopt, driver->stateDir, vm) < 0)
+ if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0)
goto error;
/* finally we can call the 'started' hook script if any */
VIR_FORCE_CLOSE(handshakefds[0]);
VIR_FORCE_CLOSE(handshakefds[1]);
VIR_FREE(logfile);
+ virObjectUnref(cfg);
if (err) {
virSetError(err);