From 9c21dff77d6b045a09f0dc8d614c534d4f65c592 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Tue, 1 Aug 2023 17:35:32 +0200 Subject: [PATCH] calendar-monitor: Improve lifecycle of updated events Keep a ref alive while updating the old event, as it may be destroyed during signal emission. --- src/core/gcal-calendar-monitor.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/core/gcal-calendar-monitor.c b/src/core/gcal-calendar-monitor.c index 68029cce..6fcfe65b 100644 --- a/src/core/gcal-calendar-monitor.c +++ b/src/core/gcal-calendar-monitor.c @@ -1071,7 +1071,7 @@ update_events_in_idle_cb (gpointer user_data) writer_locker = g_rw_lock_writer_locker_new (&self->shared.lock); for (guint i = 0; i < events->len; i++) { - GcalEvent *old_event; + g_autoptr (GcalEvent) old_event = NULL; GcalEvent *event; const gchar *event_id; @@ -1081,6 +1081,8 @@ update_events_in_idle_cb (gpointer user_data) old_event = g_hash_table_lookup (self->shared.events, event_id); if (old_event) { + g_object_ref (old_event); + g_hash_table_insert (self->shared.events, g_strdup (event_id), g_object_ref (event)); g_signal_emit (self, signals[EVENT_UPDATED], 0, old_event, event); }