From 3db322935941283eac2aa9984bc44746291cf316 Mon Sep 17 00:00:00 2001 From: George Kiagiadakis Date: Tue, 28 Sep 2021 11:46:46 +0300 Subject: [PATCH] object-manager: guard self in the idle callback using g_cclosure_new_object The idle callback may be called after the object manager has been destroyed, or the object manager may be destroyed while emitting one of the signals from the idle callback, so it needs to be ref'ed while the callback is running. g_cclosure_new_object ensures that in both cases the code behaves correctly. --- lib/wp/object-manager.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/wp/object-manager.c b/lib/wp/object-manager.c index 235bc5d4..86298699 100644 --- a/lib/wp/object-manager.c +++ b/lib/wp/object-manager.c @@ -687,8 +687,9 @@ wp_object_manager_maybe_objects_changed (WpObjectManager * self) if (!self->idle_source) { g_autoptr (WpCore) core = g_weak_ref_get (&self->core); if (core) { - wp_core_idle_add (core, &self->idle_source, - (GSourceFunc) idle_emit_objects_changed, self, NULL); + wp_core_idle_add_closure (core, &self->idle_source, + g_cclosure_new_object ( + G_CALLBACK (idle_emit_objects_changed), G_OBJECT (self))); } } }