[libvirt] [PATCH] daemon: Don't try to free an unsigned int in error paths

Eric Blake eblake at redhat.com
Fri Apr 22 16:55:04 UTC 2011


On 04/22/2011 10:31 AM, Christophe Fergeau wrote:
> On Fri, Apr 22, 2011 at 10:17:01AM -0600, Eric Blake wrote:
>> On 04/22/2011 10:11 AM, Matthias Bolte wrote:
>>>          remoteDispatchError(rerr);
>>> -        VIR_FREE(ret->names.names_len);
>>> +        VIR_FREE(ret->names.names_val);
>>
>> And to think I missed those in the huge patch.  Oops.
> 
> Maybe VIR_FREE should be changed to something like
> 
> -# define VIR_FREE(ptr) virFree(&(ptr))
> +# define VIR_FREE(ptr) \
> +    do { void *check_type = (ptr); virFree(&(check_type)); } while (0)

Not quite.  That assigns check_type to NULL, rather than the intended
assignment of ptr.

But the idea has merit; I'll see if I can come up with a variant that
still evaluates ptr only once, by wrapping the type check in a sizeof hack.

> I also get more warnings about casting from const to non-const, this can
> be avoided by making check_type const void *, but maybe these warnings
> indicate that something that shouldn't be freed is freed.

How many warnings?  If it's only a handful, we should start
investigating; if it's lots, then I'm not sure how much it buys us.

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20110422/8647c87a/attachment-0001.sig>


More information about the libvir-list mailing list