[virt-tools-list] [virt-viewer 1/2] Fix memory leak on remote-viewer exit

Marc-André Lureau mlureau at redhat.com
Sat Apr 13 14:09:05 UTC 2013


ack

----- Mensaje original -----
> When exiting remote-viewer, VirtViewepApp::dispose() calls
> virt_viewer_app_set_connect_info() with NULL parameters to free all
> internal fields. However, _set_connect_info() calls
> virt_viewer_app_update_pretty_address() which will always allocate
> a new string even if the fields it's using to fill the string are NULL.
> This commit fixes the leak by checking if the fields have non-NULL
> values before creating the newly-allocated string.
> 
> ==24180== 14 bytes in 1 blocks are definitely lost in loss record 540 of
> 8,671
> ==24180==    at 0x4A0887C: malloc (vg_replace_malloc.c:270)
> ==24180==    by 0x32D2B0A187: __vasprintf_chk (vasprintf_chk.c:80)
> ==24180==    by 0x32D52845AA: g_vasprintf (stdio2.h:210)
> ==24180==    by 0x32D52640DC: g_strdup_vprintf (gstrfuncs.c:517)
> ==24180==    by 0x32D526417B: g_strdup_printf (gstrfuncs.c:543)
> ==24180==    by 0x4136E6: virt_viewer_app_update_pretty_address
> (virt-viewer-app.c:1681)
> ==24180==    by 0x414100: virt_viewer_app_set_connect_info
> (virt-viewer-app.c:1902)
> ==24180==    by 0x4141D0: virt_viewer_app_free_connect_info
> (virt-viewer-app.c:1910)
> ==24180==    by 0x4127C6: virt_viewer_app_dispose (virt-viewer-app.c:1353)
> ==24180==    by 0x425488: remote_viewer_dispose (remote-viewer.c:131)
> ==24180==    by 0x32D5E14787: g_object_unref (gobject.c:2986)
> ==24180==    by 0x4280AF: main (remote-viewer-main.c:323)
> ---
>  src/virt-viewer-app.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
> index 3fd7613..fac87f6 100644
> --- a/src/virt-viewer-app.c
> +++ b/src/virt-viewer-app.c
> @@ -1673,11 +1673,12 @@ virt_viewer_app_update_pretty_address(VirtViewerApp
> *self)
>  
>      priv = self->priv;
>      g_free(priv->pretty_address);
> +    priv->pretty_address = NULL;
>      if (priv->guri)
>          priv->pretty_address = g_strdup(priv->guri);
>      else if (priv->gport)
>          priv->pretty_address = g_strdup_printf("%s:%s", priv->ghost,
>          priv->gport);
> -    else
> +    else if (priv->host && priv->unixsock)
>          priv->pretty_address = g_strdup_printf("%s:%s", priv->host,
>          priv->unixsock);
>  }
>  
> --
> 1.8.1.4
> 
> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
> 




More information about the virt-tools-list mailing list