[virt-tools-list] [virt-viewer] Fix leak of VirtViewerApp::windows hash table key

Marc-André Lureau mlureau at redhat.com
Wed Nov 20 14:04:04 UTC 2013


ack

----- Original Message -----
> The VirtViewerApp::windows hash table owns the memory for both the keys
> and values it stores. virt_viewer_app_remove_nth_window() uses
> g_hash_table_steal() which does not call the 'free' function neither for
> the key nor for the value. This method takes care of releasing the
> reference for the value it extracted from the hash table, but not for the
> key.
> This commit fixes by explicitly taking a reference on the value rather than
> stealing the one held by the hash table. We can then replace the use of
> g_hash_table_steal() with g_hash_table_remove() which will take care of
> freeing the removed key.
> ---
>  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 c0d3e42..eddd436 100644
> --- a/src/virt-viewer-app.c
> +++ b/src/virt-viewer-app.c
> @@ -591,7 +591,8 @@ virt_viewer_app_remove_nth_window(VirtViewerApp *self,
> gint nth)
>      g_return_val_if_fail(win != NULL, FALSE);
>  
>      DEBUG_LOG("Remove window %d %p", nth, win);
> -    removed = g_hash_table_steal(self->priv->windows, &nth);
> +    g_object_ref(win);
> +    removed = g_hash_table_remove(self->priv->windows, &nth);
>      g_warn_if_fail(removed);
>      virt_viewer_app_update_menu_displays(self);
>  
> --
> 1.8.4.2
> 
> _______________________________________________
> 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