[libvirt] [PATCH] qemuDomainObjPrivateDataClear: Don't leak @migParams

Jiri Denemark jdenemar at redhat.com
Wed Apr 18 09:23:29 UTC 2018


On Wed, Apr 18, 2018 at 10:52:13 +0200, Michal Privoznik wrote:
> Allocated in qemuMigrationParamsNew() we need to free
> priv->job.migParams when no longer needed.
> 
> ==8061== 234 (192 direct, 42 indirect) bytes in 1 blocks are definitely lost in loss record 112 of 123
> ==8061==    at 0x4C2CF26: calloc (vg_replace_malloc.c:711)
> ==8061==    by 0x5325D05: virAlloc (viralloc.c:144)
> ==8061==    by 0x1984F9: qemuMigrationParamsNew (qemu_migration_params.c:218)
> ==8061==    by 0x19A352: qemuMigrationParamsParse (qemu_migration_params.c:1185)
> ==8061==    by 0x1604D8: qemuDomainObjPrivateXMLParseJob (qemu_domain.c:2390)
> ==8061==    by 0x160AE9: qemuDomainObjPrivateXMLParse (qemu_domain.c:2517)
> ==8061==    by 0x5419EAE: virDomainObjParseXML (domain_conf.c:20442)
> ==8061==    by 0x541A25E: virDomainObjParseNode (domain_conf.c:20555)
> ==8061==    by 0x541A2FC: virDomainObjParseFile (domain_conf.c:20574)
> ==8061==    by 0x13607D: testCompareStatusXMLToXMLFiles (qemuxml2xmltest.c:75)
> ==8061==    by 0x14F3E8: virTestRun (testutils.c:180)
> ==8061==    by 0x14DCD0: mymain (qemuxml2xmltest.c:1200)

Oh, it's triggered by our tests... I was wondering how this could even
happen in real life since the job is supposed to be clean at the point
qemuDomainObjPrivateDataClear is called. Anyway, clearing the job there
explicitly shouldn't harm.

> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  src/qemu/qemu_domain.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index 672f08b442..47595e244a 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -1895,6 +1895,8 @@ qemuDomainObjPrivateDataClear(qemuDomainObjPrivatePtr priv)
>  
>      virBitmapFree(priv->migrationCaps);
>      priv->migrationCaps = NULL;
> +
> +    qemuMigrationParamsFree(priv->job.migParams);

However, if we're going to do it, this change is not enough. We should
call
    qemuDomainObjResetJob(priv);
    qemuDomainObjResetAsyncJob(priv);

to make sure all parts of the job structure are properly cleared.

Jirka




More information about the libvir-list mailing list