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

John Ferlan jferlan at redhat.com
Wed Feb 20 15:50:46 UTC 2019



On 2/20/19 10:37 AM, Ján Tomko wrote:
> 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.
> 

OK so new rules for domain_conf that didn't apply for the storage
changes....  OK - I will separate.

John

>>
>> 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




More information about the libvir-list mailing list