osd: fix memory leak of output->osd_buffer

This commit is contained in:
tokyo4j 2024-11-12 07:23:40 +09:00 committed by Hiroaki Yamamoto
parent 2d3be5ab56
commit 3f2cc1b29f
2 changed files with 5 additions and 10 deletions

View file

@ -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;

View file

@ -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 */