calendar-monitor: Improve lifecycle of updated events
Keep a ref alive while updating the old event, as it may be destroyed during signal emission.
This commit is contained in:
@@ -1071,7 +1071,7 @@ update_events_in_idle_cb (gpointer user_data)
|
|||||||
writer_locker = g_rw_lock_writer_locker_new (&self->shared.lock);
|
writer_locker = g_rw_lock_writer_locker_new (&self->shared.lock);
|
||||||
for (guint i = 0; i < events->len; i++)
|
for (guint i = 0; i < events->len; i++)
|
||||||
{
|
{
|
||||||
GcalEvent *old_event;
|
g_autoptr (GcalEvent) old_event = NULL;
|
||||||
GcalEvent *event;
|
GcalEvent *event;
|
||||||
const gchar *event_id;
|
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);
|
old_event = g_hash_table_lookup (self->shared.events, event_id);
|
||||||
if (old_event)
|
if (old_event)
|
||||||
{
|
{
|
||||||
|
g_object_ref (old_event);
|
||||||
|
|
||||||
g_hash_table_insert (self->shared.events, g_strdup (event_id), g_object_ref (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);
|
g_signal_emit (self, signals[EVENT_UPDATED], 0, old_event, event);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user