shell/window-preview-layout: Fix memory leaks

The WindowInfo allocated when adding a window was not getting free'd
when the window was getting removed again or the layout was getting
disposed. Also the hash table in which the WindowInfos are stored was
not getting free'd on destruction either. Both could result in small
leaks after closing the overview.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5238
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2256>
This commit is contained in:
Sebastian Keller 2022-03-21 20:45:36 +01:00 committed by Marge Bot
parent 908156f4bd
commit 8c40b48a09

View File

@ -292,6 +292,19 @@ shell_window_preview_layout_dispose (GObject *gobject)
G_OBJECT_CLASS (shell_window_preview_layout_parent_class)->dispose (gobject); G_OBJECT_CLASS (shell_window_preview_layout_parent_class)->dispose (gobject);
} }
static void
shell_window_preview_layout_finalize (GObject *gobject)
{
ShellWindowPreviewLayout *self = SHELL_WINDOW_PREVIEW_LAYOUT (gobject);
ShellWindowPreviewLayoutPrivate *priv;
priv = shell_window_preview_layout_get_instance_private (self);
g_hash_table_destroy (priv->windows);
G_OBJECT_CLASS (shell_window_preview_layout_parent_class)->finalize (gobject);
}
static void static void
shell_window_preview_layout_init (ShellWindowPreviewLayout *self) shell_window_preview_layout_init (ShellWindowPreviewLayout *self)
{ {
@ -299,7 +312,8 @@ shell_window_preview_layout_init (ShellWindowPreviewLayout *self)
priv = shell_window_preview_layout_get_instance_private (self); priv = shell_window_preview_layout_get_instance_private (self);
priv->windows = g_hash_table_new (NULL, NULL); priv->windows = g_hash_table_new_full (NULL, NULL, NULL,
(GDestroyNotify) g_free);
} }
static void static void
@ -314,6 +328,7 @@ shell_window_preview_layout_class_init (ShellWindowPreviewLayoutClass *klass)
layout_class->set_container = shell_window_preview_layout_set_container; layout_class->set_container = shell_window_preview_layout_set_container;
gobject_class->dispose = shell_window_preview_layout_dispose; gobject_class->dispose = shell_window_preview_layout_dispose;
gobject_class->finalize = shell_window_preview_layout_finalize;
gobject_class->get_property = shell_window_preview_layout_get_property; gobject_class->get_property = shell_window_preview_layout_get_property;
/** /**