diff options
author | Faidon Liambotis <[email protected]> | 2021-07-03 01:10:22 +0300 |
---|---|---|
committer | Victor Kareh <[email protected]> | 2021-07-09 11:03:36 -0400 |
commit | 76da06f80107bd554f22be3dfe6798a35dc1bb83 (patch) | |
tree | 10bb856d84f91a0448a5b6b1acf10890f727e03b /src | |
parent | a94210ee63d0e7f72892e16d65b1228cb3580f47 (diff) | |
download | marco-1.24.tar.bz2 marco-1.24.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
Diffstat (limited to 'src')
-rw-r--r-- | src/ui/draw-workspace.c | 8 |
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); |