From 7f533c0b23b6a04b3a8c382413e396cfce694f27 Mon Sep 17 00:00:00 2001 From: Maxim Solovyov Date: Thu, 22 Dec 2022 01:26:51 +0300 Subject: [PATCH] xrender: fix leak in deinit and check should we actually free something fixes at least #960 --- src/backend/xrender/xrender.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/backend/xrender/xrender.c b/src/backend/xrender/xrender.c index d897819..f25a921 100644 --- a/src/backend/xrender/xrender.c +++ b/src/backend/xrender/xrender.c @@ -576,9 +576,13 @@ static void deinit(backend_t *backend_data) { xcb_render_free_picture(xd->base.c, xd->alpha_pict[i]); } xcb_render_free_picture(xd->base.c, xd->target); - for (int i = 0; i < 2; i++) { - xcb_render_free_picture(xd->base.c, xd->back[i]); - xcb_free_pixmap(xd->base.c, xd->back_pixmap[i]); + for (int i = 0; i < 3; i++) { + if (xd->back[i] != XCB_NONE) { + xcb_render_free_picture(xd->base.c, xd->back[i]); + } + if (xd->back_pixmap[i] != XCB_NONE) { + xcb_free_pixmap(xd->base.c, xd->back_pixmap[i]); + } } if (xd->present_event) { xcb_unregister_for_special_event(xd->base.c, xd->present_event);