From nobody Fri May 17 00:44:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1532942416151415.1067484791397; Mon, 30 Jul 2018 02:20:16 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7617A356C6; Mon, 30 Jul 2018 09:19:43 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 459E4308BDB8; Mon, 30 Jul 2018 09:19:43 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 4AF9F4A465; Mon, 30 Jul 2018 09:19:42 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w6U9JeIe020554 for ; Mon, 30 Jul 2018 05:19:40 -0400 Received: by smtp.corp.redhat.com (Postfix) id B9C5F7C30; Mon, 30 Jul 2018 09:19:40 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 37FFF7C2F for ; Mon, 30 Jul 2018 09:19:40 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Mon, 30 Jul 2018 11:19:33 +0200 Message-Id: <03e0e896c3b8cc79f38257c9cb7ffc3d0a5c1568.1532942165.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1/3] Revert "util: cgroup: use VIR_AUTOPTR for aggregate types" X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.24 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Mon, 30 Jul 2018 09:20:14 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This reverts commit dd47145aaad780cde0f1d67cf6a85737c0292418. Turns out, our code relies on virCgroupFree(&var) setting var =3D NULL. Signed-off-by: Michal Privoznik Reviewed-by: Pavel Hrdina --- src/util/vircgroup.c | 200 ++++++++++++++++++++++++++++++++---------------= ---- 1 file changed, 127 insertions(+), 73 deletions(-) diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index 472a8167f5..6f7b5b40f7 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -836,21 +836,25 @@ virCgroupGetValueForBlkDev(virCgroupPtr group, { VIR_AUTOFREE(char *) prefix =3D NULL; VIR_AUTOFREE(char *) str =3D NULL; - VIR_AUTOPTR(virString) lines =3D NULL; + char **lines =3D NULL; + int ret =3D -1; =20 if (virCgroupGetValueStr(group, controller, key, &str) < 0) - return -1; + goto error; =20 if (!(prefix =3D virCgroupGetBlockDevString(path))) - return -1; + goto error; =20 if (!(lines =3D virStringSplit(str, "\n", -1))) - return -1; + goto error; =20 if (VIR_STRDUP(*value, virStringListGetFirstWithPrefix(lines, prefix))= < 0) - return -1; + goto error; =20 - return 0; + ret =3D 0; + error: + virStringListFree(lines); + return ret; } =20 =20 @@ -1213,11 +1217,12 @@ virCgroupAddTaskController(virCgroupPtr group, pid_= t pid, int controller) static int virCgroupSetPartitionSuffix(const char *path, char **res) { - VIR_AUTOPTR(virString) tokens =3D NULL; + char **tokens; size_t i; + int ret =3D -1; =20 if (!(tokens =3D virStringSplit(path, "/", 0))) - return -1; + return ret; =20 for (i =3D 0; tokens[i] !=3D NULL; i++) { /* Whitelist the 3 top level fixed dirs @@ -1236,18 +1241,22 @@ virCgroupSetPartitionSuffix(const char *path, char = **res) !strchr(tokens[i], '.')) { if (VIR_REALLOC_N(tokens[i], strlen(tokens[i]) + strlen(".partition") + 1= ) < 0) - return -1; + goto cleanup; strcat(tokens[i], ".partition"); } =20 if (virCgroupPartitionEscape(&(tokens[i])) < 0) - return -1; + goto cleanup; } =20 if (!(*res =3D virStringListJoin((const char **)tokens, "/"))) - return -1; + goto cleanup; =20 - return 0; + ret =3D 0; + + cleanup: + virStringListFree(tokens); + return ret; } =20 =20 @@ -1268,10 +1277,10 @@ virCgroupNewPartition(const char *path, int controllers, virCgroupPtr *group) { + int ret =3D -1; VIR_AUTOFREE(char *) parentPath =3D NULL; VIR_AUTOFREE(char *) newPath =3D NULL; - VIR_AUTOPTR(virCgroup) parent =3D NULL; - VIR_AUTOPTR(virCgroup) tmpGroup =3D NULL; + virCgroupPtr parent =3D NULL; VIR_DEBUG("path=3D%s create=3D%d controllers=3D%x", path, create, controllers); =20 @@ -1283,31 +1292,35 @@ virCgroupNewPartition(const char *path, } =20 if (virCgroupSetPartitionSuffix(path, &newPath) < 0) - return -1; + goto cleanup; =20 - if (virCgroupNew(-1, newPath, NULL, controllers, &tmpGroup) < 0) - return -1; + if (virCgroupNew(-1, newPath, NULL, controllers, group) < 0) + goto cleanup; =20 if (STRNEQ(newPath, "/")) { char *tmp; if (VIR_STRDUP(parentPath, newPath) < 0) - return -1; + goto cleanup; =20 tmp =3D strrchr(parentPath, '/'); tmp++; *tmp =3D '\0'; =20 if (virCgroupNew(-1, parentPath, NULL, controllers, &parent) < 0) - return -1; + goto cleanup; =20 - if (virCgroupMakeGroup(parent, tmpGroup, create, VIR_CGROUP_NONE) = < 0) { - virCgroupRemove(tmpGroup); - return -1; + if (virCgroupMakeGroup(parent, *group, create, VIR_CGROUP_NONE) < = 0) { + virCgroupRemove(*group); + goto cleanup; } } =20 - VIR_STEAL_PTR(*group, tmpGroup); - return 0; + ret =3D 0; + cleanup: + if (ret !=3D 0) + virCgroupFree(*group); + virCgroupFree(parent); + return ret; } =20 =20 @@ -1489,9 +1502,9 @@ virCgroupNewMachineSystemd(const char *name, int controllers, virCgroupPtr *group) { + int ret =3D -1; int rv; - VIR_AUTOPTR(virCgroup) init =3D NULL; - VIR_AUTOPTR(virCgroup) parent =3D NULL; + virCgroupPtr init, parent =3D NULL; VIR_AUTOFREE(char *) path =3D NULL; char *offset; =20 @@ -1518,10 +1531,12 @@ virCgroupNewMachineSystemd(const char *name, =20 path =3D init->controllers[VIR_CGROUP_CONTROLLER_SYSTEMD].placement; init->controllers[VIR_CGROUP_CONTROLLER_SYSTEMD].placement =3D NULL; + virCgroupFree(init); =20 if (!path || STREQ(path, "/") || path[0] !=3D '/') { VIR_DEBUG("Systemd didn't setup its controller"); - return -2; + ret =3D -2; + goto cleanup; } =20 offset =3D path; @@ -1531,7 +1546,7 @@ virCgroupNewMachineSystemd(const char *name, NULL, controllers, &parent) < 0) - return -1; + goto cleanup; =20 =20 for (;;) { @@ -1545,11 +1560,11 @@ virCgroupNewMachineSystemd(const char *name, parent, controllers, &tmp) < 0) - return -1; + goto cleanup; =20 if (virCgroupMakeGroup(parent, tmp, true, VIR_CGROUP_NONE) < 0) { virCgroupFree(tmp); - return -1; + goto cleanup; } if (t) { *t =3D '/'; @@ -1572,7 +1587,10 @@ virCgroupNewMachineSystemd(const char *name, } } =20 - return 0; + ret =3D 0; + cleanup: + virCgroupFree(parent); + return ret; } =20 =20 @@ -1593,7 +1611,8 @@ virCgroupNewMachineManual(const char *name, int controllers, virCgroupPtr *group) { - VIR_AUTOPTR(virCgroup) parent =3D NULL; + virCgroupPtr parent =3D NULL; + int ret =3D -1; =20 VIR_DEBUG("Fallback to non-systemd setup"); if (virCgroupNewPartition(partition, @@ -1601,9 +1620,9 @@ virCgroupNewMachineManual(const char *name, controllers, &parent) < 0) { if (virCgroupNewIgnoreError()) - return 0; + goto done; =20 - return -1; + goto cleanup; } =20 if (virCgroupNewDomainPartition(parent, @@ -1611,7 +1630,7 @@ virCgroupNewMachineManual(const char *name, name, true, group) < 0) - return -1; + goto cleanup; =20 if (virCgroupAddTask(*group, pidleader) < 0) { virErrorPtr saved =3D virSaveLastError(); @@ -1623,7 +1642,12 @@ virCgroupNewMachineManual(const char *name, } } =20 - return 0; + done: + ret =3D 0; + + cleanup: + virCgroupFree(parent); + return ret; } =20 =20 @@ -2352,7 +2376,7 @@ static virOnceControl virCgroupMemoryOnce =3D VIR_ONC= E_CONTROL_INITIALIZER; static void virCgroupMemoryOnceInit(void) { - VIR_AUTOPTR(virCgroup) group =3D NULL; + virCgroupPtr group; unsigned long long int mem_unlimited =3D 0ULL; =20 if (virCgroupNew(-1, "/", NULL, -1, &group) < 0) @@ -2366,6 +2390,7 @@ virCgroupMemoryOnceInit(void) "memory.limit_in_bytes", &mem_unlimited)); cleanup: + virCgroupFree(group); virCgroupMemoryUnlimitedKB =3D mem_unlimited >> 10; } =20 @@ -2966,21 +2991,22 @@ virCgroupGetPercpuVcpuSum(virCgroupPtr group, size_t nsum, virBitmapPtr cpumap) { + int ret =3D -1; ssize_t i =3D -1; + virCgroupPtr group_vcpu =3D NULL; =20 while ((i =3D virBitmapNextSetBit(guestvcpus, i)) >=3D 0) { VIR_AUTOFREE(char *) buf =3D NULL; - VIR_AUTOPTR(virCgroup) group_vcpu =3D NULL; char *pos; unsigned long long tmp; ssize_t j; =20 if (virCgroupNewThread(group, VIR_CGROUP_THREAD_VCPU, i, false, &group_vcpu) < 0) - return -1; + goto cleanup; =20 if (virCgroupGetCpuacctPercpuUsage(group_vcpu, &buf) < 0) - return -1; + goto cleanup; =20 pos =3D buf; for (j =3D virBitmapNextSetBit(cpumap, -1); @@ -2989,13 +3015,18 @@ virCgroupGetPercpuVcpuSum(virCgroupPtr group, if (virStrToLong_ull(pos, &pos, 10, &tmp) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("cpuacct parse error")); - return -1; + goto cleanup; } sum_cpu_time[j] +=3D tmp; } + + virCgroupFree(group_vcpu); } =20 - return 0; + ret =3D 0; + cleanup: + virCgroupFree(group_vcpu); + return ret; } =20 =20 @@ -3027,6 +3058,7 @@ virCgroupGetPercpuStats(virCgroupPtr group, unsigned int ncpus, virBitmapPtr guestvcpus) { + int ret =3D -1; size_t i; int need_cpus, total_cpus; char *pos; @@ -3035,7 +3067,7 @@ virCgroupGetPercpuStats(virCgroupPtr group, virTypedParameterPtr ent; int param_idx; unsigned long long cpu_time; - VIR_AUTOPTR(virBitmap) cpumap =3D NULL; + virBitmapPtr cpumap =3D NULL; =20 /* return the number of supported params */ if (nparams =3D=3D 0 && ncpus !=3D 0) { @@ -3052,19 +3084,21 @@ virCgroupGetPercpuStats(virCgroupPtr group, total_cpus =3D virBitmapSize(cpumap); =20 /* return total number of cpus */ - if (ncpus =3D=3D 0) - return total_cpus; + if (ncpus =3D=3D 0) { + ret =3D total_cpus; + goto cleanup; + } =20 if (start_cpu >=3D total_cpus) { virReportError(VIR_ERR_INVALID_ARG, _("start_cpu %d larger than maximum of %d"), start_cpu, total_cpus - 1); - return -1; + goto cleanup; } =20 /* we get percpu cputime accounting info. */ if (virCgroupGetCpuacctPercpuUsage(group, &buf)) - return -1; + goto cleanup; pos =3D buf; =20 /* return percpu cputime in index 0 */ @@ -3079,14 +3113,14 @@ virCgroupGetPercpuStats(virCgroupPtr group, } else if (virStrToLong_ull(pos, &pos, 10, &cpu_time) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("cpuacct parse error")); - return -1; + goto cleanup; } if (i < start_cpu) continue; ent =3D ¶ms[(i - start_cpu) * nparams + param_idx]; if (virTypedParameterAssign(ent, VIR_DOMAIN_CPU_STATS_CPUTIME, VIR_TYPED_PARAM_ULLONG, cpu_time) < 0) - return -1; + goto cleanup; } =20 /* return percpu vcputime in index 1 */ @@ -3094,10 +3128,10 @@ virCgroupGetPercpuStats(virCgroupPtr group, =20 if (guestvcpus && param_idx < nparams) { if (VIR_ALLOC_N(sum_cpu_time, need_cpus) < 0) - return -1; + goto cleanup; if (virCgroupGetPercpuVcpuSum(group, guestvcpus, sum_cpu_time, need_cpus, cpumap) < 0) - return -1; + goto cleanup; =20 for (i =3D start_cpu; i < need_cpus; i++) { if (virTypedParameterAssign(¶ms[(i - start_cpu) * nparams + @@ -3105,13 +3139,17 @@ virCgroupGetPercpuStats(virCgroupPtr group, VIR_DOMAIN_CPU_STATS_VCPUTIME, VIR_TYPED_PARAM_ULLONG, sum_cpu_time[i]) < 0) - return -1; + goto cleanup; } =20 param_idx++; } =20 - return param_idx; + ret =3D param_idx; + + cleanup: + virBitmapFree(cpumap); + return ret; } =20 =20 @@ -3467,18 +3505,23 @@ int virCgroupKill(virCgroupPtr group, int signum) { VIR_DEBUG("group=3D%p path=3D%s signum=3D%d", group, group->path, sign= um); + int ret; /* The 'tasks' file in cgroups can contain duplicated * pids, so we use a hash to track which we've already * killed. */ - VIR_AUTOPTR(virHashTable) pids =3D virHashCreateFull(100, - NULL, - virCgroupPidCode, - virCgroupPidEqual, - virCgroupPidCopy, - NULL); + virHashTablePtr pids =3D virHashCreateFull(100, + NULL, + virCgroupPidCode, + virCgroupPidEqual, + virCgroupPidCopy, + NULL); =20 - return virCgroupKillInternal(group, signum, pids); + ret =3D virCgroupKillInternal(group, signum, pids); + + virHashFree(pids); + + return ret; } =20 =20 @@ -3493,6 +3536,7 @@ virCgroupKillRecursiveInternal(virCgroupPtr group, bool killedAny =3D false; VIR_AUTOFREE(char *) keypath =3D NULL; DIR *dp =3D NULL; + virCgroupPtr subgroup =3D NULL; struct dirent *ent; int direrr; VIR_DEBUG("group=3D%p path=3D%s signum=3D%d pids=3D%p", @@ -3517,8 +3561,6 @@ virCgroupKillRecursiveInternal(virCgroupPtr group, } =20 while ((direrr =3D virDirRead(dp, &ent, keypath)) > 0) { - VIR_AUTOPTR(virCgroup) subgroup =3D NULL; - if (ent->d_type !=3D DT_DIR) continue; =20 @@ -3535,6 +3577,8 @@ virCgroupKillRecursiveInternal(virCgroupPtr group, =20 if (dormdir) virCgroupRemove(subgroup); + + virCgroupFree(subgroup); } if (direrr < 0) goto cleanup; @@ -3543,6 +3587,7 @@ virCgroupKillRecursiveInternal(virCgroupPtr group, ret =3D killedAny ? 1 : 0; =20 cleanup: + virCgroupFree(subgroup); VIR_DIR_CLOSE(dp); return ret; } @@ -3551,15 +3596,20 @@ virCgroupKillRecursiveInternal(virCgroupPtr group, int virCgroupKillRecursive(virCgroupPtr group, int signum) { + int ret; VIR_DEBUG("group=3D%p path=3D%s signum=3D%d", group, group->path, sign= um); - VIR_AUTOPTR(virHashTable) pids =3D virHashCreateFull(100, - NULL, - virCgroupPidCode, - virCgroupPidEqual, - virCgroupPidCopy, - NULL); + virHashTablePtr pids =3D virHashCreateFull(100, + NULL, + virCgroupPidCode, + virCgroupPidEqual, + virCgroupPidCopy, + NULL); =20 - return virCgroupKillRecursiveInternal(group, signum, pids, false); + ret =3D virCgroupKillRecursiveInternal(group, signum, pids, false); + + virHashFree(pids); + + return ret; } =20 =20 @@ -3894,12 +3944,15 @@ virCgroupHasEmptyTasks(virCgroupPtr cgroup, int con= troller) bool virCgroupControllerAvailable(int controller) { - VIR_AUTOPTR(virCgroup) cgroup =3D NULL; + virCgroupPtr cgroup; + bool ret =3D false; =20 if (virCgroupNewSelf(&cgroup) < 0) - return false; + return ret; =20 - return virCgroupHasController(cgroup, controller); + ret =3D virCgroupHasController(cgroup, controller); + virCgroupFree(cgroup); + return ret; } =20 #else /* !VIR_CGROUP_SUPPORTED */ @@ -4687,7 +4740,7 @@ virCgroupDelThread(virCgroupPtr cgroup, virCgroupThreadName nameval, int idx) { - VIR_AUTOPTR(virCgroup) new_cgroup =3D NULL; + virCgroupPtr new_cgroup =3D NULL; =20 if (cgroup) { if (virCgroupNewThread(cgroup, nameval, idx, false, &new_cgroup) <= 0) @@ -4695,6 +4748,7 @@ virCgroupDelThread(virCgroupPtr cgroup, =20 /* Remove the offlined cgroup */ virCgroupRemove(new_cgroup); + virCgroupFree(new_cgroup); } =20 return 0; --=20 2.16.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri May 17 00:44:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 153294238853563.8821037372569; Mon, 30 Jul 2018 02:19:48 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4C6BE91500; Mon, 30 Jul 2018 09:19:46 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 140322B3A7; Mon, 30 Jul 2018 09:19:46 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id BDC654A46C; Mon, 30 Jul 2018 09:19:45 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w6U9JfwL020559 for ; Mon, 30 Jul 2018 05:19:41 -0400 Received: by smtp.corp.redhat.com (Postfix) id 64A0A7C30; Mon, 30 Jul 2018 09:19:41 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 03FC77C2F for ; Mon, 30 Jul 2018 09:19:40 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Mon, 30 Jul 2018 11:19:34 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 2/3] Revert "util: cgroup: define cleanup function using VIR_DEFINE_AUTOPTR_FUNC" X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Mon, 30 Jul 2018 09:19:46 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This reverts commit 4da4a9fe0c0956feefe3d592b4ba2b92b2a9a2f9. Turns out, our code relies on virCgroupFree(&var) setting var =3D NULL. Signed-off-by: Michal Privoznik Reviewed-by: Pavel Hrdina --- src/util/vircgroup.c | 1 + src/util/vircgroup.h | 9 ++------- src/util/vircgrouppriv.h | 2 +- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index 6f7b5b40f7..4e34bf5885 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -50,6 +50,7 @@ #include "vircgrouppriv.h" =20 #include "virutil.h" +#include "viralloc.h" #include "virerror.h" #include "virlog.h" #include "virfile.h" diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h index 065861d700..e4ffd57b6b 100644 --- a/src/util/vircgroup.h +++ b/src/util/vircgroup.h @@ -27,11 +27,9 @@ =20 # include "virutil.h" # include "virbitmap.h" -# include "viralloc.h" =20 -struct _virCgroup; -typedef struct _virCgroup virCgroup; -typedef virCgroup *virCgroupPtr; +struct virCgroup; +typedef struct virCgroup *virCgroupPtr; =20 enum { VIR_CGROUP_CONTROLLER_CPU, @@ -299,7 +297,4 @@ int virCgroupSetOwner(virCgroupPtr cgroup, int virCgroupHasEmptyTasks(virCgroupPtr cgroup, int controller); =20 bool virCgroupControllerAvailable(int controller); - -VIR_DEFINE_AUTOPTR_FUNC(virCgroup, virCgroupFree) - #endif /* __VIR_CGROUP_H__ */ diff --git a/src/util/vircgrouppriv.h b/src/util/vircgrouppriv.h index a72bee1ef2..722863e5b6 100644 --- a/src/util/vircgrouppriv.h +++ b/src/util/vircgrouppriv.h @@ -42,7 +42,7 @@ struct virCgroupController { char *placement; }; =20 -struct _virCgroup { +struct virCgroup { char *path; =20 struct virCgroupController controllers[VIR_CGROUP_CONTROLLER_LAST]; --=20 2.16.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri May 17 00:44:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1532942419729970.9337720903528; Mon, 30 Jul 2018 02:20:19 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 698793086272; Mon, 30 Jul 2018 09:20:13 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1958420078BC; Mon, 30 Jul 2018 09:20:13 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 7824018037EC; Mon, 30 Jul 2018 09:20:12 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w6U9Jg8D020564 for ; Mon, 30 Jul 2018 05:19:42 -0400 Received: by smtp.corp.redhat.com (Postfix) id 2F7577C30; Mon, 30 Jul 2018 09:19:42 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id A368B7C2F for ; Mon, 30 Jul 2018 09:19:41 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Mon, 30 Jul 2018 11:19:35 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 3/3] Revert "util: cgroup: modify virCgroupFree to take virCgroupPtr" X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.25 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Mon, 30 Jul 2018 09:20:18 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This reverts commit 0f80c71822d82465d558d697d3be9af2d21e3675. Turns out, our code relies on virCgroupFree(&var) setting var =3D NULL. Conflicts: src/util/vircgroup.c: context because 94f1855f099445d is not reverted. Signed-off-by: Michal Privoznik Reviewed-by: Pavel Hrdina --- src/libvirt-lxc.c | 4 ++-- src/lxc/lxc_cgroup.c | 4 ++-- src/lxc/lxc_container.c | 2 +- src/lxc/lxc_controller.c | 2 +- src/lxc/lxc_domain.c | 2 +- src/lxc/lxc_process.c | 10 ++++----- src/qemu/qemu_cgroup.c | 16 +++++++------- src/qemu/qemu_domain.c | 2 +- src/qemu/qemu_driver.c | 34 +++++++++++++++-------------- src/qemu/qemu_process.c | 2 +- src/util/vircgroup.c | 56 ++++++++++++++++++++++++--------------------= ---- src/util/vircgroup.h | 2 +- tests/vircgrouptest.c | 42 ++++++++++++++++++------------------ 13 files changed, 90 insertions(+), 88 deletions(-) diff --git a/src/libvirt-lxc.c b/src/libvirt-lxc.c index 12be89398e..c9f2146487 100644 --- a/src/libvirt-lxc.c +++ b/src/libvirt-lxc.c @@ -309,12 +309,12 @@ int virDomainLxcEnterCGroup(virDomainPtr domain, if (virCgroupAddTask(cgroup, getpid()) < 0) goto error; =20 - virCgroupFree(cgroup); + virCgroupFree(&cgroup); =20 return 0; =20 error: virDispatchError(NULL); - virCgroupFree(cgroup); + virCgroupFree(&cgroup); return -1; } diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c index 873c843542..8e937ec389 100644 --- a/src/lxc/lxc_cgroup.c +++ b/src/lxc/lxc_cgroup.c @@ -306,7 +306,7 @@ int virLXCCgroupGetMeminfo(virLXCMeminfoPtr meminfo) =20 ret =3D 0; cleanup: - virCgroupFree(cgroup); + virCgroupFree(&cgroup); return ret; } =20 @@ -515,7 +515,7 @@ virCgroupPtr virLXCCgroupCreate(virDomainDefPtr def, def->idmap.uidmap[0].target, def->idmap.gidmap[0].target, (1 << VIR_CGROUP_CONTROLLER_SYSTEMD)) < 0) { - virCgroupFree(cgroup); + virCgroupFree(&cgroup); cgroup =3D NULL; goto cleanup; } diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c index 407214fced..3a1b2d6819 100644 --- a/src/lxc/lxc_container.c +++ b/src/lxc/lxc_container.c @@ -1815,7 +1815,7 @@ static int lxcContainerSetupPivotRoot(virDomainDefPtr= vmDef, =20 cleanup: VIR_FREE(stateDir); - virCgroupFree(cgroup); + virCgroupFree(&cgroup); VIR_FREE(sec_mount_options); return ret; } diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c index 7be45f84ce..4e84391bf5 100644 --- a/src/lxc/lxc_controller.c +++ b/src/lxc/lxc_controller.c @@ -296,7 +296,7 @@ static void virLXCControllerFree(virLXCControllerPtr ct= rl) VIR_FREE(ctrl->nbdpids); =20 VIR_FREE(ctrl->nsFDs); - virCgroupFree(ctrl->cgroup); + virCgroupFree(&ctrl->cgroup); =20 /* This must always be the last thing to be closed */ VIR_FORCE_CLOSE(ctrl->handshakeFd); diff --git a/src/lxc/lxc_domain.c b/src/lxc/lxc_domain.c index eb0071d07a..b197f9dfc2 100644 --- a/src/lxc/lxc_domain.c +++ b/src/lxc/lxc_domain.c @@ -172,7 +172,7 @@ virLXCDomainObjPrivateFree(void *data) { virLXCDomainObjPrivatePtr priv =3D data; =20 - virCgroupFree(priv->cgroup); + virCgroupFree(&priv->cgroup); virLXCDomainObjFreeJob(priv); VIR_FREE(priv); } diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c index 5d8fa63c67..33c806630b 100644 --- a/src/lxc/lxc_process.c +++ b/src/lxc/lxc_process.c @@ -220,7 +220,7 @@ static void virLXCProcessCleanup(virLXCDriverPtr driver, =20 if (priv->cgroup) { virCgroupRemove(priv->cgroup); - virCgroupFree(priv->cgroup); + virCgroupFree(&priv->cgroup); } =20 /* Get machined to terminate the machine as it may not have cleaned it @@ -1201,26 +1201,26 @@ int virLXCProcessStart(virConnectPtr conn, =20 if (!virCgroupHasController(selfcgroup, VIR_CGROUP_CONTROLLER_CPUACCT)) { - virCgroupFree(selfcgroup); + virCgroupFree(&selfcgroup); virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Unable to find 'cpuacct' cgroups controller moun= t")); 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 moun= t")); 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); =20 if (vm->def->nconsoles =3D=3D 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c index 8a00ffcd45..43e17d786e 100644 --- a/src/qemu/qemu_cgroup.c +++ b/src/qemu/qemu_cgroup.c @@ -841,7 +841,7 @@ qemuSetupCpusetMems(virDomainObjPtr vm) ret =3D 0; cleanup: VIR_FREE(mem_mask); - virCgroupFree(cgroup_temp); + virCgroupFree(&cgroup_temp); return ret; } =20 @@ -920,7 +920,7 @@ qemuInitCgroup(virDomainObjPtr vm, if (!virCgroupAvailable()) goto done; =20 - virCgroupFree(priv->cgroup); + virCgroupFree(&priv->cgroup); =20 if (!vm->def->resource) { virDomainResourceDefPtr res; @@ -1008,7 +1008,7 @@ qemuRestoreCgroupState(virDomainObjPtr vm) goto cleanup; =20 VIR_FREE(nodeset); - virCgroupFree(cgroup_temp); + virCgroupFree(&cgroup_temp); } =20 for (i =3D 0; i < vm->def->niothreadids; i++) { @@ -1021,7 +1021,7 @@ qemuRestoreCgroupState(virDomainObjPtr vm) goto cleanup; =20 VIR_FREE(nodeset); - virCgroupFree(cgroup_temp); + virCgroupFree(&cgroup_temp); } =20 if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_EMULATOR, 0, @@ -1035,7 +1035,7 @@ qemuRestoreCgroupState(virDomainObjPtr vm) VIR_FREE(mem_mask); VIR_FREE(nodeset); virBitmapFree(all_nodes); - virCgroupFree(cgroup_temp); + virCgroupFree(&cgroup_temp); return; =20 error: @@ -1057,7 +1057,7 @@ qemuConnectCgroup(virDomainObjPtr vm) if (!virCgroupAvailable()) goto done; =20 - virCgroupFree(priv->cgroup); + virCgroupFree(&priv->cgroup); =20 if (virCgroupNewDetectMachine(vm->def->name, "qemu", @@ -1203,7 +1203,7 @@ qemuSetupCgroupForExtDevices(virDomainObjPtr vm, ret =3D qemuExtDevicesSetupCgroup(driver, vm->def, cgroup_temp); =20 cleanup: - virCgroupFree(cgroup_temp); + virCgroupFree(&cgroup_temp); =20 return ret; } @@ -1281,7 +1281,7 @@ qemuCgroupEmulatorAllNodesDataFree(qemuCgroupEmulator= AllNodesDataPtr data) if (!data) return; =20 - virCgroupFree(data->emulatorCgroup); + virCgroupFree(&data->emulatorCgroup); VIR_FREE(data->emulatorMemMask); VIR_FREE(data); } diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index bda53814a3..de056272e8 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1920,7 +1920,7 @@ qemuDomainObjPrivateDataClear(qemuDomainObjPrivatePtr= priv) virStringListFree(priv->qemuDevices); priv->qemuDevices =3D NULL; =20 - virCgroupFree(priv->cgroup); + virCgroupFree(&priv->cgroup); =20 virPerfFree(priv->perf); priv->perf =3D NULL; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index f7018076c4..fb0d4a8c7a 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -5078,7 +5078,7 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm, =20 cleanup: virBitmapFree(tmpmap); - virCgroupFree(cgroup_vcpu); + virCgroupFree(&cgroup_vcpu); VIR_FREE(str); virObjectEventStateQueue(driver->domainEventState, event); return ret; @@ -5315,7 +5315,8 @@ qemuDomainPinEmulator(virDomainPtr dom, qemuDomainObjEndJob(driver, vm); =20 cleanup: - virCgroupFree(cgroup_emulator); + if (cgroup_emulator) + virCgroupFree(&cgroup_emulator); virObjectEventStateQueue(driver->domainEventState, event); VIR_FREE(str); virBitmapFree(pcpumap); @@ -5796,7 +5797,8 @@ qemuDomainPinIOThread(virDomainPtr dom, qemuDomainObjEndJob(driver, vm); =20 cleanup: - virCgroupFree(cgroup_iothread); + if (cgroup_iothread) + virCgroupFree(&cgroup_iothread); virObjectEventStateQueue(driver->domainEventState, event); VIR_FREE(str); virBitmapFree(pcpumap); @@ -9850,7 +9852,7 @@ qemuDomainSetNumaParamsLive(virDomainObjPtr vm, false, &cgroup_temp) < 0 || virCgroupSetCpusetMems(cgroup_temp, nodeset_str) < 0) goto cleanup; - virCgroupFree(cgroup_temp); + virCgroupFree(&cgroup_temp); =20 for (i =3D 0; i < virDomainDefGetVcpusMax(vm->def); i++) { virDomainVcpuDefPtr vcpu =3D virDomainDefGetVcpu(vm->def, i); @@ -9862,7 +9864,7 @@ qemuDomainSetNumaParamsLive(virDomainObjPtr vm, false, &cgroup_temp) < 0 || virCgroupSetCpusetMems(cgroup_temp, nodeset_str) < 0) goto cleanup; - virCgroupFree(cgroup_temp); + virCgroupFree(&cgroup_temp); } =20 for (i =3D 0; i < vm->def->niothreadids; i++) { @@ -9871,13 +9873,13 @@ qemuDomainSetNumaParamsLive(virDomainObjPtr vm, false, &cgroup_temp) < 0 || virCgroupSetCpusetMems(cgroup_temp, nodeset_str) < 0) goto cleanup; - virCgroupFree(cgroup_temp); + virCgroupFree(&cgroup_temp); } =20 ret =3D 0; cleanup: VIR_FREE(nodeset_str); - virCgroupFree(cgroup_temp); + virCgroupFree(&cgroup_temp); =20 return ret; } @@ -10299,13 +10301,13 @@ qemuSetVcpusBWLive(virDomainObjPtr vm, virCgroupP= tr cgroup, if (qemuSetupCgroupVcpuBW(cgroup_vcpu, period, quota) < 0) goto cleanup; =20 - virCgroupFree(cgroup_vcpu); + virCgroupFree(&cgroup_vcpu); } =20 return 0; =20 cleanup: - virCgroupFree(cgroup_vcpu); + virCgroupFree(&cgroup_vcpu); return -1; } =20 @@ -10326,11 +10328,11 @@ qemuSetEmulatorBandwidthLive(virCgroupPtr cgroup, if (qemuSetupCgroupVcpuBW(cgroup_emulator, period, quota) < 0) goto cleanup; =20 - virCgroupFree(cgroup_emulator); + virCgroupFree(&cgroup_emulator); return 0; =20 cleanup: - virCgroupFree(cgroup_emulator); + virCgroupFree(&cgroup_emulator); return -1; } =20 @@ -10357,13 +10359,13 @@ qemuSetIOThreadsBWLive(virDomainObjPtr vm, virCgr= oupPtr cgroup, if (qemuSetupCgroupVcpuBW(cgroup_iothread, period, quota) < 0) goto cleanup; =20 - virCgroupFree(cgroup_iothread); + virCgroupFree(&cgroup_iothread); } =20 return 0; =20 cleanup: - virCgroupFree(cgroup_iothread); + virCgroupFree(&cgroup_iothread); return -1; } =20 @@ -10749,7 +10751,7 @@ qemuGetVcpusBWLive(virDomainObjPtr vm, ret =3D 0; =20 cleanup: - virCgroupFree(cgroup_vcpu); + virCgroupFree(&cgroup_vcpu); return ret; } =20 @@ -10772,7 +10774,7 @@ qemuGetEmulatorBandwidthLive(virCgroupPtr cgroup, ret =3D 0; =20 cleanup: - virCgroupFree(cgroup_emulator); + virCgroupFree(&cgroup_emulator); return ret; } =20 @@ -10808,7 +10810,7 @@ qemuGetIOThreadsBWLive(virDomainObjPtr vm, ret =3D 0; =20 cleanup: - virCgroupFree(cgroup_iothread); + virCgroupFree(&cgroup_iothread); return ret; } =20 diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 2f0b4c1d80..c4e33723d1 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -2532,7 +2532,7 @@ qemuProcessSetupPid(virDomainObjPtr vm, if (cgroup) { if (ret < 0) virCgroupRemove(cgroup); - virCgroupFree(cgroup); + virCgroupFree(&cgroup); } =20 return ret; diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index 4e34bf5885..6bf4e88da1 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -1118,7 +1118,7 @@ virCgroupNew(pid_t pid, return 0; =20 error: - virCgroupFree(*group); + virCgroupFree(group); *group =3D NULL; =20 return -1; @@ -1319,8 +1319,8 @@ virCgroupNewPartition(const char *path, ret =3D 0; cleanup: if (ret !=3D 0) - virCgroupFree(*group); - virCgroupFree(parent); + virCgroupFree(group); + virCgroupFree(&parent); return ret; } =20 @@ -1384,7 +1384,7 @@ virCgroupNewDomainPartition(virCgroupPtr partition, if (virCgroupMakeGroup(partition, *group, create, VIR_CGROUP_MEM_HIERACHY) < 0) { virCgroupRemove(*group); - virCgroupFree(*group); + virCgroupFree(group); return -1; } =20 @@ -1441,7 +1441,7 @@ virCgroupNewThread(virCgroupPtr domain, =20 if (virCgroupMakeGroup(domain, *group, create, VIR_CGROUP_NONE) < 0) { virCgroupRemove(*group); - virCgroupFree(*group); + virCgroupFree(group); return -1; } =20 @@ -1479,7 +1479,7 @@ virCgroupNewDetectMachine(const char *name, true, machinename)) { VIR_DEBUG("Failed to validate machine name for '%s' driver '%s'", name, drivername); - virCgroupFree(*group); + virCgroupFree(group); return 0; } =20 @@ -1532,7 +1532,7 @@ virCgroupNewMachineSystemd(const char *name, =20 path =3D init->controllers[VIR_CGROUP_CONTROLLER_SYSTEMD].placement; init->controllers[VIR_CGROUP_CONTROLLER_SYSTEMD].placement =3D NULL; - virCgroupFree(init); + virCgroupFree(&init); =20 if (!path || STREQ(path, "/") || path[0] !=3D '/') { VIR_DEBUG("Systemd didn't setup its controller"); @@ -1564,13 +1564,13 @@ virCgroupNewMachineSystemd(const char *name, goto cleanup; =20 if (virCgroupMakeGroup(parent, tmp, true, VIR_CGROUP_NONE) < 0) { - virCgroupFree(tmp); + virCgroupFree(&tmp); goto cleanup; } if (t) { *t =3D '/'; offset =3D t; - virCgroupFree(parent); + virCgroupFree(&parent); parent =3D tmp; } else { *group =3D tmp; @@ -1581,7 +1581,7 @@ virCgroupNewMachineSystemd(const char *name, if (virCgroupAddTask(*group, pidleader) < 0) { virErrorPtr saved =3D virSaveLastError(); virCgroupRemove(*group); - virCgroupFree(*group); + virCgroupFree(group); if (saved) { virSetError(saved); virFreeError(saved); @@ -1590,7 +1590,7 @@ virCgroupNewMachineSystemd(const char *name, =20 ret =3D 0; cleanup: - virCgroupFree(parent); + virCgroupFree(&parent); return ret; } =20 @@ -1636,7 +1636,7 @@ virCgroupNewMachineManual(const char *name, if (virCgroupAddTask(*group, pidleader) < 0) { virErrorPtr saved =3D virSaveLastError(); virCgroupRemove(*group); - virCgroupFree(*group); + virCgroupFree(group); if (saved) { virSetError(saved); virFreeError(saved); @@ -1647,7 +1647,7 @@ virCgroupNewMachineManual(const char *name, ret =3D 0; =20 cleanup: - virCgroupFree(parent); + virCgroupFree(&parent); return ret; } =20 @@ -1714,21 +1714,21 @@ virCgroupNewIgnoreError(void) * @group: The group structure to free */ void -virCgroupFree(virCgroupPtr group) +virCgroupFree(virCgroupPtr *group) { size_t i; =20 - if (!group) + if (*group =3D=3D NULL) return; =20 for (i =3D 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); } =20 - VIR_FREE(group->path); - VIR_FREE(group); + VIR_FREE((*group)->path); + VIR_FREE(*group); } =20 =20 @@ -2391,7 +2391,7 @@ virCgroupMemoryOnceInit(void) "memory.limit_in_bytes", &mem_unlimited)); cleanup: - virCgroupFree(group); + virCgroupFree(&group); virCgroupMemoryUnlimitedKB =3D mem_unlimited >> 10; } =20 @@ -3021,12 +3021,12 @@ virCgroupGetPercpuVcpuSum(virCgroupPtr group, sum_cpu_time[j] +=3D tmp; } =20 - virCgroupFree(group_vcpu); + virCgroupFree(&group_vcpu); } =20 ret =3D 0; cleanup: - virCgroupFree(group_vcpu); + virCgroupFree(&group_vcpu); return ret; } =20 @@ -3579,7 +3579,7 @@ virCgroupKillRecursiveInternal(virCgroupPtr group, if (dormdir) virCgroupRemove(subgroup); =20 - virCgroupFree(subgroup); + virCgroupFree(&subgroup); } if (direrr < 0) goto cleanup; @@ -3588,7 +3588,7 @@ virCgroupKillRecursiveInternal(virCgroupPtr group, ret =3D killedAny ? 1 : 0; =20 cleanup: - virCgroupFree(subgroup); + virCgroupFree(&subgroup); VIR_DIR_CLOSE(dp); return ret; } @@ -3952,7 +3952,7 @@ virCgroupControllerAvailable(int controller) return ret; =20 ret =3D virCgroupHasController(cgroup, controller); - virCgroupFree(cgroup); + virCgroupFree(&cgroup); return ret; } =20 @@ -4084,7 +4084,7 @@ virCgroupNewIgnoreError(void) =20 =20 void -virCgroupFree(virCgroupPtr group ATTRIBUTE_UNUSED) +virCgroupFree(virCgroupPtr *group ATTRIBUTE_UNUSED) { virReportSystemError(ENXIO, "%s", _("Control groups not supported on this platform"= )); @@ -4749,7 +4749,7 @@ virCgroupDelThread(virCgroupPtr cgroup, =20 /* Remove the offlined cgroup */ virCgroupRemove(new_cgroup); - virCgroupFree(new_cgroup); + virCgroupFree(&new_cgroup); } =20 return 0; diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h index e4ffd57b6b..d833927678 100644 --- a/src/util/vircgroup.h +++ b/src/util/vircgroup.h @@ -122,7 +122,7 @@ int virCgroupTerminateMachine(const char *name) =20 bool virCgroupNewIgnoreError(void); =20 -void virCgroupFree(virCgroupPtr group); +void virCgroupFree(virCgroupPtr *group); =20 bool virCgroupHasController(virCgroupPtr cgroup, int controller); int virCgroupPathOfController(virCgroupPtr group, diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c index e5190e3b34..be50f3e73c 100644 --- a/tests/vircgrouptest.c +++ b/tests/vircgrouptest.c @@ -198,7 +198,7 @@ testCgroupDetectMounts(const void *args) cleanup: VIR_FREE(mounts); VIR_FREE(parsed); - virCgroupFree(group); + virCgroupFree(&group); virBufferFreeAndReset(&buf); return result; } @@ -227,7 +227,7 @@ static int testCgroupNewForSelf(const void *args ATTRIB= UTE_UNUSED) ret =3D validateCgroup(cgroup, "", mountsFull, links, placement); =20 cleanup: - virCgroupFree(cgroup); + virCgroupFree(&cgroup); return ret; } =20 @@ -304,7 +304,7 @@ static int testCgroupNewForPartition(const void *args A= TTRIBUTE_UNUSED) goto cleanup; } ret =3D validateCgroup(cgroup, "/virtualmachines.partition", mountsSma= ll, links, placementSmall); - virCgroupFree(cgroup); + virCgroupFree(&cgroup); =20 if ((rv =3D virCgroupNewPartition("/virtualmachines", true, -1, &cgrou= p)) !=3D 0) { fprintf(stderr, "Cannot create /virtualmachines cgroup: %d\n", -rv= ); @@ -313,7 +313,7 @@ static int testCgroupNewForPartition(const void *args A= TTRIBUTE_UNUSED) ret =3D validateCgroup(cgroup, "/virtualmachines.partition", mountsFul= l, links, placementFull); =20 cleanup: - virCgroupFree(cgroup); + virCgroupFree(&cgroup); return ret; } =20 @@ -353,7 +353,7 @@ static int testCgroupNewForPartitionNested(const void *= args ATTRIBUTE_UNUSED) } =20 /* Should now work */ - virCgroupFree(cgroup); + virCgroupFree(&cgroup); if ((rv =3D virCgroupNewPartition("/deployment/production", true, -1, = &cgroup)) !=3D 0) { fprintf(stderr, "Failed to create /deployment/production cgroup: %= d\n", -rv); goto cleanup; @@ -363,7 +363,7 @@ static int testCgroupNewForPartitionNested(const void *= args ATTRIBUTE_UNUSED) mountsFull, links, placementFull); =20 cleanup: - virCgroupFree(cgroup); + virCgroupFree(&cgroup); return ret; } =20 @@ -402,14 +402,14 @@ static int testCgroupNewForPartitionNestedDeep(const = void *args ATTRIBUTE_UNUSED goto cleanup; } =20 - virCgroupFree(cgroup); + virCgroupFree(&cgroup); if ((rv =3D virCgroupNewPartition("/user/berrange.user", true, -1, &cg= roup)) !=3D 0) { fprintf(stderr, "Failed to create /user/berrange.user cgroup: %d\n= ", -rv); goto cleanup; } =20 /* Should now work */ - virCgroupFree(cgroup); + virCgroupFree(&cgroup); if ((rv =3D virCgroupNewPartition("/user/berrange.user/production", tr= ue, -1, &cgroup)) !=3D 0) { fprintf(stderr, "Failed to create /user/berrange.user/production c= group: %d\n", -rv); goto cleanup; @@ -419,7 +419,7 @@ static int testCgroupNewForPartitionNestedDeep(const vo= id *args ATTRIBUTE_UNUSED mountsFull, links, placementFull); =20 cleanup: - virCgroupFree(cgroup); + virCgroupFree(&cgroup); return ret; } =20 @@ -455,8 +455,8 @@ static int testCgroupNewForPartitionDomain(const void *= args ATTRIBUTE_UNUSED) ret =3D validateCgroup(domaincgroup, "/production.partition/foo.libvir= t-lxc", mountsFull, links, placement); =20 cleanup: - virCgroupFree(partitioncgroup); - virCgroupFree(domaincgroup); + virCgroupFree(&partitioncgroup); + virCgroupFree(&domaincgroup); return ret; } =20 @@ -506,10 +506,10 @@ static int testCgroupNewForPartitionDomainEscaped(con= st void *args ATTRIBUTE_UNU ret =3D validateCgroup(domaincgroup, "/_cgroup.evil/net_cls.evil/__evi= l.evil/_cpu.foo.libvirt-lxc", mountsFull, links, placement); =20 cleanup: - virCgroupFree(partitioncgroup3); - virCgroupFree(partitioncgroup2); - virCgroupFree(partitioncgroup1); - virCgroupFree(domaincgroup); + virCgroupFree(&partitioncgroup3); + virCgroupFree(&partitioncgroup2); + virCgroupFree(&partitioncgroup1); + virCgroupFree(&domaincgroup); return ret; } =20 @@ -535,7 +535,7 @@ static int testCgroupNewForSelfAllInOne(const void *arg= s ATTRIBUTE_UNUSED) ret =3D validateCgroup(cgroup, "", mountsAllInOne, linksAllInOne, plac= ement); =20 cleanup: - virCgroupFree(cgroup); + virCgroupFree(&cgroup); return ret; } =20 @@ -563,7 +563,7 @@ static int testCgroupNewForSelfLogind(const void *args = ATTRIBUTE_UNUSED) ret =3D validateCgroup(cgroup, "", mountsLogind, linksLogind, placemen= t); =20 cleanup: - virCgroupFree(cgroup); + virCgroupFree(&cgroup); return ret; } =20 @@ -690,7 +690,7 @@ static int testCgroupGetPercpuStats(const void *args AT= TRIBUTE_UNUSED) ret =3D 0; =20 cleanup: - virCgroupFree(cgroup); + virCgroupFree(&cgroup); VIR_FREE(params); return ret; } @@ -723,7 +723,7 @@ static int testCgroupGetMemoryUsage(const void *args AT= TRIBUTE_UNUSED) ret =3D 0; =20 cleanup: - virCgroupFree(cgroup); + virCgroupFree(&cgroup); return ret; } =20 @@ -773,7 +773,7 @@ static int testCgroupGetBlkioIoServiced(const void *arg= s ATTRIBUTE_UNUSED) ret =3D 0; =20 cleanup: - virCgroupFree(cgroup); + virCgroupFree(&cgroup); return ret; } =20 @@ -846,7 +846,7 @@ static int testCgroupGetBlkioIoDeviceServiced(const voi= d *args ATTRIBUTE_UNUSED) ret =3D 0; =20 cleanup: - virCgroupFree(cgroup); + virCgroupFree(&cgroup); return ret; } =20 --=20 2.16.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list