[libvirt] [PATCH v4 1/4] qemu_process.c: use g_autofree
Daniel Henrique Barboza
danielhb413 at gmail.com
Fri Dec 20 19:02:37 UTC 2019
On 12/20/19 3:34 PM, Cole Robinson wrote:
> On 12/19/19 4:09 PM, Daniel Henrique Barboza wrote:
>> Change all feasible strings and scalar pointers to use g_autofree.
>>
>> Signed-off-by: Daniel Henrique Barboza <danielhb413 at gmail.com>
>> ---
>> src/qemu/qemu_process.c | 97 +++++++++++++++--------------------------
>> 1 file changed, 34 insertions(+), 63 deletions(-)
[...]>>
>
> Last one looks suspicious, either it's fixing a memory leak or something
> is wrong! It's a bit of both. Later code is:
>
>
> template = g_strdup_printf("%s/qmp-XXXXXX", proc->libDir);
>
> if (!(proc->uniqDir = g_mkdtemp(template))) {
>
> virReportSystemError(errno,
>
> _("Failed to create unique directory with "
>
> "template '%s' for probing QEMU"),
>
> template);
>
> return -1;
>
> }
>
> g_mkdtemp actually alters and returns the passed in string, it doesn't
> return new memory. So if g_mkdtemp succeeds, we are transfering
> ownership to proc->uniqDir. There's a bug though that template isn't
> free'd if g_mkdtemp fails.
>
> So if you convert to g_autofree, after g_mkdtemp succeeds, you need to
> set 'template = NULL';
Thanks. I got a weird feeling about this change (this code wasn't present in
the previous version) because I thought strange that no one put a VIR_FREE()
in a string returned by g_strdup_printf(), which I know for a fact that
put stuff in the heap.
DHB
>
> - Cole
>
More information about the libvir-list
mailing list