]> git.mdlowis.com Git - proto/labwc.git/commitdiff
osd: fix memory leak of output->osd_buffer
authortokyo4j <hrak1529@gmail.com>
Mon, 11 Nov 2024 22:23:40 +0000 (07:23 +0900)
committerHiroaki Yamamoto <hrak1529@gmail.com>
Tue, 12 Nov 2024 07:21:06 +0000 (16:21 +0900)
include/labwc.h
src/osd.c

index 6aa2a5b47f2d26e31bfd4e604d0a4866b7285daf..b9095ae15f85ae5cd5c4c30d207872b064b39db2 100644 (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;
index 1c3b85a7e78803d9bcd97d7153c58124fd4097fb..ca5a705991522be8dfd91205f35780575cb749dd 100644 (file)
--- 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 */