if (virCgroupAddTask(cgroup, getpid()) < 0)
goto error;
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
return 0;
error:
virDispatchError(NULL);
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
return -1;
}
ret = 0;
cleanup:
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
return ret;
}
def->idmap.uidmap[0].target,
def->idmap.gidmap[0].target,
(1 << VIR_CGROUP_CONTROLLER_SYSTEMD)) < 0) {
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
cgroup = NULL;
goto cleanup;
}
cleanup:
VIR_FREE(stateDir);
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
VIR_FREE(sec_mount_options);
return ret;
}
VIR_FREE(ctrl->nbdpids);
VIR_FREE(ctrl->nsFDs);
- virCgroupFree(ctrl->cgroup);
+ virCgroupFree(&ctrl->cgroup);
/* This must always be the last thing to be closed */
VIR_FORCE_CLOSE(ctrl->handshakeFd);
{
virLXCDomainObjPrivatePtr priv = data;
- virCgroupFree(priv->cgroup);
+ virCgroupFree(&priv->cgroup);
virLXCDomainObjFreeJob(priv);
VIR_FREE(priv);
}
if (priv->cgroup) {
virCgroupRemove(priv->cgroup);
- virCgroupFree(priv->cgroup);
+ virCgroupFree(&priv->cgroup);
}
/* Get machined to terminate the machine as it may not have cleaned it
if (!virCgroupHasController(selfcgroup,
VIR_CGROUP_CONTROLLER_CPUACCT)) {
- virCgroupFree(selfcgroup);
+ virCgroupFree(&selfcgroup);
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Unable to find 'cpuacct' cgroups controller mount"));
return -1;
}
if (!virCgroupHasController(selfcgroup,
VIR_CGROUP_CONTROLLER_DEVICES)) {
- virCgroupFree(selfcgroup);
+ virCgroupFree(&selfcgroup);
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Unable to find 'devices' cgroups controller mount"));
return -1;
}
if (!virCgroupHasController(selfcgroup,
VIR_CGROUP_CONTROLLER_MEMORY)) {
- virCgroupFree(selfcgroup);
+ virCgroupFree(&selfcgroup);
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Unable to find 'memory' cgroups controller mount"));
return -1;
}
- virCgroupFree(selfcgroup);
+ virCgroupFree(&selfcgroup);
if (vm->def->nconsoles == 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
ret = 0;
cleanup:
VIR_FREE(mem_mask);
- virCgroupFree(cgroup_temp);
+ virCgroupFree(&cgroup_temp);
return ret;
}
if (!virCgroupAvailable())
goto done;
- virCgroupFree(priv->cgroup);
+ virCgroupFree(&priv->cgroup);
if (!vm->def->resource) {
virDomainResourceDefPtr res;
goto cleanup;
VIR_FREE(nodeset);
- virCgroupFree(cgroup_temp);
+ virCgroupFree(&cgroup_temp);
}
for (i = 0; i < vm->def->niothreadids; i++) {
goto cleanup;
VIR_FREE(nodeset);
- virCgroupFree(cgroup_temp);
+ virCgroupFree(&cgroup_temp);
}
if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_EMULATOR, 0,
VIR_FREE(mem_mask);
VIR_FREE(nodeset);
virBitmapFree(all_nodes);
- virCgroupFree(cgroup_temp);
+ virCgroupFree(&cgroup_temp);
return;
error:
if (!virCgroupAvailable())
goto done;
- virCgroupFree(priv->cgroup);
+ virCgroupFree(&priv->cgroup);
if (virCgroupNewDetectMachine(vm->def->name,
"qemu",
ret = qemuExtDevicesSetupCgroup(driver, vm->def, cgroup_temp);
cleanup:
- virCgroupFree(cgroup_temp);
+ virCgroupFree(&cgroup_temp);
return ret;
}
if (!data)
return;
- virCgroupFree(data->emulatorCgroup);
+ virCgroupFree(&data->emulatorCgroup);
VIR_FREE(data->emulatorMemMask);
VIR_FREE(data);
}
virStringListFree(priv->qemuDevices);
priv->qemuDevices = NULL;
- virCgroupFree(priv->cgroup);
+ virCgroupFree(&priv->cgroup);
virPerfFree(priv->perf);
priv->perf = NULL;
cleanup:
virBitmapFree(tmpmap);
- virCgroupFree(cgroup_vcpu);
+ virCgroupFree(&cgroup_vcpu);
VIR_FREE(str);
virObjectEventStateQueue(driver->domainEventState, event);
return ret;
qemuDomainObjEndJob(driver, vm);
cleanup:
- virCgroupFree(cgroup_emulator);
+ if (cgroup_emulator)
+ virCgroupFree(&cgroup_emulator);
virObjectEventStateQueue(driver->domainEventState, event);
VIR_FREE(str);
virBitmapFree(pcpumap);
qemuDomainObjEndJob(driver, vm);
cleanup:
- virCgroupFree(cgroup_iothread);
+ if (cgroup_iothread)
+ virCgroupFree(&cgroup_iothread);
virObjectEventStateQueue(driver->domainEventState, event);
VIR_FREE(str);
virBitmapFree(pcpumap);
false, &cgroup_temp) < 0 ||
virCgroupSetCpusetMems(cgroup_temp, nodeset_str) < 0)
goto cleanup;
- virCgroupFree(cgroup_temp);
+ virCgroupFree(&cgroup_temp);
for (i = 0; i < virDomainDefGetVcpusMax(vm->def); i++) {
virDomainVcpuDefPtr vcpu = virDomainDefGetVcpu(vm->def, i);
false, &cgroup_temp) < 0 ||
virCgroupSetCpusetMems(cgroup_temp, nodeset_str) < 0)
goto cleanup;
- virCgroupFree(cgroup_temp);
+ virCgroupFree(&cgroup_temp);
}
for (i = 0; i < vm->def->niothreadids; i++) {
false, &cgroup_temp) < 0 ||
virCgroupSetCpusetMems(cgroup_temp, nodeset_str) < 0)
goto cleanup;
- virCgroupFree(cgroup_temp);
+ virCgroupFree(&cgroup_temp);
}
ret = 0;
cleanup:
VIR_FREE(nodeset_str);
- virCgroupFree(cgroup_temp);
+ virCgroupFree(&cgroup_temp);
return ret;
}
if (qemuSetupCgroupVcpuBW(cgroup_vcpu, period, quota) < 0)
goto cleanup;
- virCgroupFree(cgroup_vcpu);
+ virCgroupFree(&cgroup_vcpu);
}
return 0;
cleanup:
- virCgroupFree(cgroup_vcpu);
+ virCgroupFree(&cgroup_vcpu);
return -1;
}
if (qemuSetupCgroupVcpuBW(cgroup_emulator, period, quota) < 0)
goto cleanup;
- virCgroupFree(cgroup_emulator);
+ virCgroupFree(&cgroup_emulator);
return 0;
cleanup:
- virCgroupFree(cgroup_emulator);
+ virCgroupFree(&cgroup_emulator);
return -1;
}
if (qemuSetupCgroupVcpuBW(cgroup_iothread, period, quota) < 0)
goto cleanup;
- virCgroupFree(cgroup_iothread);
+ virCgroupFree(&cgroup_iothread);
}
return 0;
cleanup:
- virCgroupFree(cgroup_iothread);
+ virCgroupFree(&cgroup_iothread);
return -1;
}
ret = 0;
cleanup:
- virCgroupFree(cgroup_vcpu);
+ virCgroupFree(&cgroup_vcpu);
return ret;
}
ret = 0;
cleanup:
- virCgroupFree(cgroup_emulator);
+ virCgroupFree(&cgroup_emulator);
return ret;
}
ret = 0;
cleanup:
- virCgroupFree(cgroup_iothread);
+ virCgroupFree(&cgroup_iothread);
return ret;
}
if (cgroup) {
if (ret < 0)
virCgroupRemove(cgroup);
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
}
return ret;
return 0;
error:
- virCgroupFree(*group);
+ virCgroupFree(group);
*group = NULL;
return -1;
ret = 0;
cleanup:
if (ret != 0)
- virCgroupFree(*group);
- virCgroupFree(parent);
+ virCgroupFree(group);
+ virCgroupFree(&parent);
return ret;
}
if (virCgroupMakeGroup(partition, *group, create,
VIR_CGROUP_MEM_HIERACHY) < 0) {
virCgroupRemove(*group);
- virCgroupFree(*group);
+ virCgroupFree(group);
return -1;
}
if (virCgroupMakeGroup(domain, *group, create, VIR_CGROUP_NONE) < 0) {
virCgroupRemove(*group);
- virCgroupFree(*group);
+ virCgroupFree(group);
return -1;
}
true, machinename)) {
VIR_DEBUG("Failed to validate machine name for '%s' driver '%s'",
name, drivername);
- virCgroupFree(*group);
+ virCgroupFree(group);
return 0;
}
path = init->controllers[VIR_CGROUP_CONTROLLER_SYSTEMD].placement;
init->controllers[VIR_CGROUP_CONTROLLER_SYSTEMD].placement = NULL;
- virCgroupFree(init);
+ virCgroupFree(&init);
if (!path || STREQ(path, "/") || path[0] != '/') {
VIR_DEBUG("Systemd didn't setup its controller");
goto cleanup;
if (virCgroupMakeGroup(parent, tmp, true, VIR_CGROUP_NONE) < 0) {
- virCgroupFree(tmp);
+ virCgroupFree(&tmp);
goto cleanup;
}
if (t) {
*t = '/';
offset = t;
- virCgroupFree(parent);
+ virCgroupFree(&parent);
parent = tmp;
} else {
*group = tmp;
if (virCgroupAddTask(*group, pidleader) < 0) {
virErrorPtr saved = virSaveLastError();
virCgroupRemove(*group);
- virCgroupFree(*group);
+ virCgroupFree(group);
if (saved) {
virSetError(saved);
virFreeError(saved);
ret = 0;
cleanup:
- virCgroupFree(parent);
+ virCgroupFree(&parent);
return ret;
}
if (virCgroupAddTask(*group, pidleader) < 0) {
virErrorPtr saved = virSaveLastError();
virCgroupRemove(*group);
- virCgroupFree(*group);
+ virCgroupFree(group);
if (saved) {
virSetError(saved);
virFreeError(saved);
ret = 0;
cleanup:
- virCgroupFree(parent);
+ virCgroupFree(&parent);
return ret;
}
* @group: The group structure to free
*/
void
-virCgroupFree(virCgroupPtr group)
+virCgroupFree(virCgroupPtr *group)
{
size_t i;
- if (!group)
+ if (*group == NULL)
return;
for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
- VIR_FREE(group->controllers[i].mountPoint);
- VIR_FREE(group->controllers[i].linkPoint);
- VIR_FREE(group->controllers[i].placement);
+ VIR_FREE((*group)->controllers[i].mountPoint);
+ VIR_FREE((*group)->controllers[i].linkPoint);
+ VIR_FREE((*group)->controllers[i].placement);
}
- VIR_FREE(group->path);
- VIR_FREE(group);
+ VIR_FREE((*group)->path);
+ VIR_FREE(*group);
}
"memory.limit_in_bytes",
&mem_unlimited));
cleanup:
- virCgroupFree(group);
+ virCgroupFree(&group);
virCgroupMemoryUnlimitedKB = mem_unlimited >> 10;
}
sum_cpu_time[j] += tmp;
}
- virCgroupFree(group_vcpu);
+ virCgroupFree(&group_vcpu);
}
ret = 0;
cleanup:
- virCgroupFree(group_vcpu);
+ virCgroupFree(&group_vcpu);
return ret;
}
if (dormdir)
virCgroupRemove(subgroup);
- virCgroupFree(subgroup);
+ virCgroupFree(&subgroup);
}
if (direrr < 0)
goto cleanup;
ret = killedAny ? 1 : 0;
cleanup:
- virCgroupFree(subgroup);
+ virCgroupFree(&subgroup);
VIR_DIR_CLOSE(dp);
return ret;
}
return ret;
ret = virCgroupHasController(cgroup, controller);
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
return ret;
}
void
-virCgroupFree(virCgroupPtr group ATTRIBUTE_UNUSED)
+virCgroupFree(virCgroupPtr *group ATTRIBUTE_UNUSED)
{
virReportSystemError(ENXIO, "%s",
_("Control groups not supported on this platform"));
/* Remove the offlined cgroup */
virCgroupRemove(new_cgroup);
- virCgroupFree(new_cgroup);
+ virCgroupFree(&new_cgroup);
}
return 0;
bool virCgroupNewIgnoreError(void);
-void virCgroupFree(virCgroupPtr group);
+void virCgroupFree(virCgroupPtr *group);
bool virCgroupHasController(virCgroupPtr cgroup, int controller);
int virCgroupPathOfController(virCgroupPtr group,
cleanup:
VIR_FREE(mounts);
VIR_FREE(parsed);
- virCgroupFree(group);
+ virCgroupFree(&group);
virBufferFreeAndReset(&buf);
return result;
}
ret = validateCgroup(cgroup, "", mountsFull, links, placement);
cleanup:
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
return ret;
}
goto cleanup;
}
ret = validateCgroup(cgroup, "/virtualmachines.partition", mountsSmall, links, placementSmall);
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
if ((rv = virCgroupNewPartition("/virtualmachines", true, -1, &cgroup)) != 0) {
fprintf(stderr, "Cannot create /virtualmachines cgroup: %d\n", -rv);
ret = validateCgroup(cgroup, "/virtualmachines.partition", mountsFull, links, placementFull);
cleanup:
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
return ret;
}
}
/* Should now work */
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
if ((rv = virCgroupNewPartition("/deployment/production", true, -1, &cgroup)) != 0) {
fprintf(stderr, "Failed to create /deployment/production cgroup: %d\n", -rv);
goto cleanup;
mountsFull, links, placementFull);
cleanup:
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
return ret;
}
goto cleanup;
}
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
if ((rv = virCgroupNewPartition("/user/berrange.user", true, -1, &cgroup)) != 0) {
fprintf(stderr, "Failed to create /user/berrange.user cgroup: %d\n", -rv);
goto cleanup;
}
/* Should now work */
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
if ((rv = virCgroupNewPartition("/user/berrange.user/production", true, -1, &cgroup)) != 0) {
fprintf(stderr, "Failed to create /user/berrange.user/production cgroup: %d\n", -rv);
goto cleanup;
mountsFull, links, placementFull);
cleanup:
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
return ret;
}
ret = validateCgroup(domaincgroup, "/production.partition/foo.libvirt-lxc", mountsFull, links, placement);
cleanup:
- virCgroupFree(partitioncgroup);
- virCgroupFree(domaincgroup);
+ virCgroupFree(&partitioncgroup);
+ virCgroupFree(&domaincgroup);
return ret;
}
ret = validateCgroup(domaincgroup, "/_cgroup.evil/net_cls.evil/__evil.evil/_cpu.foo.libvirt-lxc", mountsFull, links, placement);
cleanup:
- virCgroupFree(partitioncgroup3);
- virCgroupFree(partitioncgroup2);
- virCgroupFree(partitioncgroup1);
- virCgroupFree(domaincgroup);
+ virCgroupFree(&partitioncgroup3);
+ virCgroupFree(&partitioncgroup2);
+ virCgroupFree(&partitioncgroup1);
+ virCgroupFree(&domaincgroup);
return ret;
}
ret = validateCgroup(cgroup, "", mountsAllInOne, linksAllInOne, placement);
cleanup:
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
return ret;
}
ret = validateCgroup(cgroup, "", mountsLogind, linksLogind, placement);
cleanup:
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
return ret;
}
ret = 0;
cleanup:
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
VIR_FREE(params);
return ret;
}
ret = 0;
cleanup:
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
return ret;
}
ret = 0;
cleanup:
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
return ret;
}
ret = 0;
cleanup:
- virCgroupFree(cgroup);
+ virCgroupFree(&cgroup);
return ret;
}