[libvirt] [PATCH 2/4] conf: Use VIR_AUTOPTR(virBitmap) in domain_conf

Ján Tomko jtomko at redhat.com
Wed Feb 20 15:37:30 UTC 2019


On Wed, Feb 20, 2019 at 09:46:57AM -0500, John Ferlan wrote:
>Let's make use of the auto __cleanup capabilities cleaning up any
>now unnecessary goto paths.

My clang 7 and gcc 8.2 both happily compile code where the cleanup:
label only contains a return statement, the goto paths can be cleaned
up later.

>
>Signed-off-by: John Ferlan <jferlan at redhat.com>
>---
> src/conf/domain_conf.c | 53 ++++++++++++++++--------------------------
> 1 file changed, 20 insertions(+), 33 deletions(-)
>
>diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>index ceeb247ef4..ddcb76f05d 100644
>--- a/src/conf/domain_conf.c
>+++ b/src/conf/domain_conf.c
>@@ -1803,8 +1803,8 @@ virDomainDefGetVcpuPinInfoHelper(virDomainDefPtr def,
>                                  virBitmapPtr autoCpuset)
> {
>     int maxvcpus = virDomainDefGetVcpusMax(def);
>-    virBitmapPtr allcpumap = NULL;
>     size_t i;
>+    VIR_AUTOPTR(virBitmap) allcpumap = NULL;
>
>     if (hostcpus < 0)
>         return -1;
>@@ -1831,7 +1831,6 @@ virDomainDefGetVcpuPinInfoHelper(virDomainDefPtr def,
>         virBitmapToDataBuf(bitmap, VIR_GET_CPUMAP(cpumaps, maplen, i), maplen);
>     }
>
>-    virBitmapFree(allcpumap);
>     return i;
> }
>
>@@ -2984,11 +2983,10 @@ static int
> virDomainIOThreadIDDefArrayInit(virDomainDefPtr def,
>                                 unsigned int iothreads)
> {
>-    int retval = -1;
>     size_t i;
>     ssize_t nxt = -1;
>     virDomainIOThreadIDDefPtr iothrid = NULL;
>-    virBitmapPtr thrmap = NULL;
>+    VIR_AUTOPTR(virBitmap) thrmap = NULL;
>
>     /* Same value (either 0 or some number), then we have none to fill in or
>      * the iothreadid array was filled from the XML
>@@ -2998,7 +2996,7 @@ virDomainIOThreadIDDefArrayInit(virDomainDefPtr def,
>
>     /* iothread's are numbered starting at 1, account for that */
>     if (!(thrmap = virBitmapNew(iothreads + 1)))
>-        goto error;
>+        return -1;
>     virBitmapSetAll(thrmap);
>
>     /* Clear 0 since we don't use it, then mark those which are
>@@ -3010,27 +3008,23 @@ virDomainIOThreadIDDefArrayInit(virDomainDefPtr def,
>
>     /* resize array */
>     if (VIR_REALLOC_N(def->iothreadids, iothreads) < 0)
>-        goto error;
>+        return -1;
>
>     /* Populate iothreadids[] using the set bit number from thrmap */
>     while (def->niothreadids < iothreads) {
>         if ((nxt = virBitmapNextSetBit(thrmap, nxt)) < 0) {
>             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>                            _("failed to populate iothreadids"));
>-            goto error;
>+            return -1;
>         }
>         if (VIR_ALLOC(iothrid) < 0)
>-            goto error;
>+            return -1;
>         iothrid->iothread_id = nxt;
>         iothrid->autofill = true;
>         def->iothreadids[def->niothreadids++] = iothrid;
>     }
>
>-    retval = 0;
>-
>- error:
>-    virBitmapFree(thrmap);
>-    return retval;
>+    return 0;
> }
>
>
>@@ -18327,9 +18321,9 @@ virDomainIOThreadPinDefParseXML(xmlNodePtr node,
> {
>     int ret = -1;
>     virDomainIOThreadIDDefPtr iothrid;
>-    virBitmapPtr cpumask = NULL;
>     unsigned int iothreadid;
>     char *tmp = NULL;
>+    VIR_AUTOPTR(virBitmap) cpumask = NULL;
>
>     if (!(tmp = virXMLPropString(node, "iothread"))) {
>         virReportError(VIR_ERR_XML_ERROR, "%s",
>@@ -18385,7 +18379,6 @@ virDomainIOThreadPinDefParseXML(xmlNodePtr node,
>
>  cleanup:
>     VIR_FREE(tmp);
>-    virBitmapFree(cpumask);
>     return ret;
> }
>
>@@ -18397,8 +18390,9 @@ virDomainIOThreadPinDefParseXML(xmlNodePtr node,
> static virBitmapPtr
> virDomainEmulatorPinDefParseXML(xmlNodePtr node)
> {
>-    virBitmapPtr def = NULL;
>+    virBitmapPtr ret = NULL;
>     char *tmp = NULL;
>+    VIR_AUTOPTR(virBitmap) def = NULL;
>
>     if (!(tmp = virXMLPropString(node, "cpuset"))) {
>         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>@@ -18412,14 +18406,14 @@ virDomainEmulatorPinDefParseXML(xmlNodePtr node)
>     if (virBitmapIsAllClear(def)) {
>         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>                        _("Invalid value of 'cpuset': %s"), tmp);
>-        virBitmapFree(def);
>-        def = NULL;
>         goto cleanup;
>     }
>
>+    VIR_STEAL_PTR(ret, def);
>+

This 'ret' addition can also be separate.

Jano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20190220/655d4708/attachment-0001.sig>


More information about the libvir-list mailing list