Re: [PATCH 07/16] snapshot: Add accessors for updating snapshot list relations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 3/28/19 2:40 AM, Bjoern Walk wrote:

>>>>> +/* Take all children of @from and convert them into children of @to. */
>>>>> +void
>>>>> +virDomainSnapshotMoveChildren(virDomainSnapshotObjPtr from,
>>>>> +                              virDomainSnapshotObjPtr to)
>>>>> +{
>>>>> +    virDomainSnapshotObjPtr child;
>>>>> +    virDomainSnapshotObjPtr last;
>>>>> +
>>>>> +    for (child = from->first_child; child; child = child->sibling) {
>>>>> +        child->parent = to;
>>>>> +        if (!child->sibling)
>>>>> +            last = child;
>>>>> +    }
>>>>> +    to->nchildren += from->nchildren;
>>>>> +    last->sibling = to->first_child;
>>>>
>>>> Silly Coverity compiler gets quite confused thinking that @last couldn't
>>>> be set while not considering the above loop couldn't end without it
>>>> unless of course from->first_child == NULL I suppose, which would be a
>>>> different issue. Still if before the for loop we check "if
>>>> (!from->first_child) return;", then coverity is happy.
>>>
>>> Good find from Coverity. If there are no children to move, I do need the
>>> early exit, so I'll squash that in.
>>
>> Did you forget this? Function is pushed in this (broken?) version and I
>> get a warning/error on GCC 8.0.1.
> 
> Sorry, no morning coffee yet, the fix is in, but I still get a GCC
> warning:
> 
> 	  CC       conf/libvirt_conf_la-virdomainmomentobjlist.lo
> 	../../src/conf/virdomainmomentobjlist.c: In function 'virDomainMomentMoveChildren':
> 	../../src/conf/virdomainmomentobjlist.c:178:19: error: 'last' may be used uninitialized in this function [-Werror=maybe-uninitialized]
> 		 last->sibling = to->first_child;
> 		 ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
> 	cc1: all warnings being treated as errors
> 	make[5]: *** [Makefile:9650: conf/libvirt_conf_la-virdomainmomentobjlist.lo] Error 1

So gcc isn't as smart as Coverity at seeing that it will always be
initialized.

> 
> This fixes it:
> 
> 	diff --git a/src/conf/virdomainmomentobjlist.c b/src/conf/virdomainmomentobjlist.c
> 	index 92cf52dd..2e9343ff 100644
> 	--- a/src/conf/virdomainmomentobjlist.c
> 	+++ b/src/conf/virdomainmomentobjlist.c
> 	@@ -165,7 +165,7 @@ virDomainMomentMoveChildren(virDomainMomentObjPtr from,
> 								 virDomainMomentObjPtr to)
> 	 {
> 		 virDomainMomentObjPtr child;
> 	-    virDomainMomentObjPtr last;
> 	+    virDomainMomentObjPtr last = NULL;

Yep, will push shortly as a build-fixer. I'm assuming you're okay if I
push it in your name, as you reported and posted the fix, even though it
wasn't the usual git format.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux