Re: [PATCHv3] network: Avoid memory leaks on networkBuildDnsmasqArgv

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

 



On 01/31/2012 12:15 AM, Alex Jia wrote:
>> What I'd suggest is:
>>
>> declare variables outside the loop,
>> start the for loop by freeing any state from previous iterations,
>> and also free all state in the cleanup label
>>
>> at which point, you _don't_ have to follow the v1 approach of trying to
>> free variables before every goto or break (and missing some).  Something
>> like:
>>
>> char *record = NULL;
>> for (i = 0; i<  dns->nsrrvrecords; i++) {
>>      /* free previous iteration */
>>      VIR_FREE(record);
> Hi Eric, thanks for your nice comment, the 'record' variable is
> allocated memory in previous for loop,
> but we free it in here, the issue is 'dns->ntxtrecords' =
> 'dns->nsrrvrecord' ? if not, is it also okay?

That's why you _also_ free things in the cleanup label.

If every iteration of the loop frees the previous iteration, then the
first iteration of the loop is a no-op, and the cleanup code frees the
last iteration, no matter whether you get to the cleanup code via a goto
or whether the last iteration exited normally.

-- 
Eric Blake   eblake@xxxxxxxxxx    +1-919-301-3266
Libvirt virtualization library http://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]