summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFaidon Liambotis <[email protected]>2021-07-03 01:10:22 +0300
committerVictor Kareh <[email protected]>2021-07-09 11:03:36 -0400
commit76da06f80107bd554f22be3dfe6798a35dc1bb83 (patch)
tree10bb856d84f91a0448a5b6b1acf10890f727e03b
parenta94210ee63d0e7f72892e16d65b1228cb3580f47 (diff)
downloadmarco-76da06f80107bd554f22be3dfe6798a35dc1bb83.tar.bz2
marco-76da06f80107bd554f22be3dfe6798a35dc1bb83.tar.xz
tabpopup: fix cairo surface leak1.24
Commit 6b05da5e49996a2101edfd703dd3f5d91011d726 introduced a Cairo surface leak, by calling gdk_cairo_surface_create_from_pixbuf() but then never freeing those surfaces with cairo_surface_destroy(). This manifested in leaking resources when switching between virtual desktops, as observed using xrestop ("Pxms" column), which made the desktop slow and ultimately unusable after a few weeks of uptime. Fixes #685
-rw-r--r--src/ui/draw-workspace.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/ui/draw-workspace.c b/src/ui/draw-workspace.c
index aca58440..efced123 100644
--- a/src/ui/draw-workspace.c
+++ b/src/ui/draw-workspace.c
@@ -131,6 +131,7 @@ draw_window (GtkWidget *widget,
/* If the icon is too big, fall back to mini icon. */
if (icon_w > (winrect->width - 2) || icon_h > (winrect->height - 2))
{
+ cairo_surface_destroy (icon);
icon = gdk_cairo_surface_create_from_pixbuf (win->mini_icon, scale, NULL);
if (icon)
{
@@ -139,7 +140,10 @@ draw_window (GtkWidget *widget,
/* Give up. */
if (icon_w > (winrect->width - 2) || icon_h > (winrect->height - 2))
- icon = NULL;
+ {
+ cairo_surface_destroy (icon);
+ icon = NULL;
+ }
}
}
}
@@ -155,6 +159,8 @@ draw_window (GtkWidget *widget,
cairo_clip (cr);
cairo_paint (cr);
cairo_restore (cr);
+
+ cairo_surface_destroy (icon);
}
gtk_style_context_get_color (style, state, &color);