From: tokyo4j Date: Mon, 11 Nov 2024 22:23:40 +0000 (+0900) Subject: osd: fix memory leak of output->osd_buffer X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=3f2cc1b29f45c44b7e170a9559c15e6f12aebf25;p=proto%2Flabwc.git osd: fix memory leak of output->osd_buffer --- 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 */