From 3f2cc1b29f45c44b7e170a9559c15e6f12aebf25 Mon Sep 17 00:00:00 2001 From: tokyo4j Date: Tue, 12 Nov 2024 07:23:40 +0900 Subject: [PATCH] osd: fix memory leak of output->osd_buffer --- include/labwc.h | 2 -- src/osd.c | 13 +++++-------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/include/labwc.h b/include/labwc.h index 6aa2a5b4..b9095ae1 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -401,8 +401,6 @@ struct output { struct wl_list regions; /* struct region.link */ - struct lab_data_buffer *osd_buffer; - struct wl_listener destroy; struct wl_listener frame; struct wl_listener request_state; diff --git a/src/osd.c b/src/osd.c index 1c3b85a7..ca5a7059 100644 --- a/src/osd.c +++ b/src/osd.c @@ -347,22 +347,19 @@ display_osd(struct output *output, struct wl_array *views) h += theme->osd_window_switcher_item_height; } - /* Reset buffer */ - if (output->osd_buffer) { - wlr_buffer_drop(&output->osd_buffer->base); - } - output->osd_buffer = buffer_create_cairo(w, h, scale); - if (!output->osd_buffer) { + struct lab_data_buffer *buffer = buffer_create_cairo(w, h, scale); + if (!buffer) { wlr_log(WLR_ERROR, "Failed to allocate cairo buffer for the window switcher"); return; } /* Render OSD image */ - cairo_t *cairo = output->osd_buffer->cairo; + cairo_t *cairo = buffer->cairo; render_osd(server, cairo, w, h, show_workspace, workspace_name, views); struct wlr_scene_buffer *scene_buffer = wlr_scene_buffer_create( - output->osd_tree, &output->osd_buffer->base); + output->osd_tree, &buffer->base); + wlr_buffer_drop(&buffer->base); wlr_scene_buffer_set_dest_size(scene_buffer, w, h); /* Center OSD */ -- 2.52.0