From f3cd2b8ce7ce0fcc7a9131b1ddd3e4efd3ea83e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Sat, 23 Jul 2022 17:06:59 +0200 Subject: [PATCH] wayland: Clean up output state MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes memory leak: ==995170== 383 (96 direct, 287 indirect) bytes in 1 blocks are definitely lost in loss record 14,733 of 15,641 ==995170== at 0x483F7B5: malloc (vg_replace_malloc.c:381) ==995170== by 0x4B21178: g_malloc (gmem.c:125) ==995170== by 0x4B395C0: g_slice_alloc (gslice.c:1072) ==995170== by 0x4B0766D: g_hash_table_new_full (ghash.c:1071) ==995170== by 0x4A4A8B4: meta_wayland_compositor_update_outputs (meta-wayland-outputs.c:483) ==995170== by 0x4A4ABAB: meta_wayland_outputs_init (meta-wayland-outputs.c:716) ==995170== by 0x4A3FA65: meta_wayland_compositor_new (meta-wayland.c:620) ==995170== by 0x49C7FA7: meta_context_start (meta-context.c:412) ==995170== by 0x10F065: main (mutter.c:148) v2: * Use meta_backend_get_monitor_manager. (Jonas Ã…dahl) Fixes: 9a4783e3644c ("Integrate the monitor manager with wayland") Part-of: --- src/wayland/meta-wayland-outputs.c | 13 +++++++++++++ src/wayland/meta-wayland-outputs.h | 2 ++ src/wayland/meta-wayland.c | 1 + 3 files changed, 16 insertions(+) diff --git a/src/wayland/meta-wayland-outputs.c b/src/wayland/meta-wayland-outputs.c index 6c8baa0df..c2544ff12 100644 --- a/src/wayland/meta-wayland-outputs.c +++ b/src/wayland/meta-wayland-outputs.c @@ -704,6 +704,19 @@ bind_xdg_output_manager (struct wl_client *client, NULL, NULL); } +void +meta_wayland_outputs_finalize (MetaWaylandCompositor *compositor) +{ + MetaBackend *backend = meta_context_get_backend (compositor->context); + MetaMonitorManager *monitor_manager = + meta_backend_get_monitor_manager (backend); + + g_signal_handlers_disconnect_by_func (monitor_manager, on_monitors_changed, + compositor); + + g_hash_table_destroy (compositor->outputs); +} + void meta_wayland_outputs_init (MetaWaylandCompositor *compositor) { diff --git a/src/wayland/meta-wayland-outputs.h b/src/wayland/meta-wayland-outputs.h index 87b980f69..af3a509ce 100644 --- a/src/wayland/meta-wayland-outputs.h +++ b/src/wayland/meta-wayland-outputs.h @@ -36,6 +36,8 @@ const GList * meta_wayland_output_get_resources (MetaWaylandOutput *wayland_outp MetaLogicalMonitor * meta_wayland_output_get_logical_monitor (MetaWaylandOutput *wayland_output); +void meta_wayland_outputs_finalize (MetaWaylandCompositor *compositor); + void meta_wayland_outputs_init (MetaWaylandCompositor *compositor); #endif /* META_WAYLAND_OUTPUTS_H */ diff --git a/src/wayland/meta-wayland.c b/src/wayland/meta-wayland.c index fb800f589..f8b23fec8 100644 --- a/src/wayland/meta-wayland.c +++ b/src/wayland/meta-wayland.c @@ -449,6 +449,7 @@ meta_wayland_compositor_finalize (GObject *object) ClutterActor *stage = meta_backend_get_stage (backend); meta_wayland_activation_finalize (compositor); + meta_wayland_outputs_finalize (compositor); meta_wayland_presentation_time_finalize (compositor); g_hash_table_destroy (compositor->scheduled_surface_associations);