]> git.0d.be Git - empathy.git/commitdiff
empathy-contact-list-store: remove the setup idle cb when store is destroyed
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Mon, 19 Oct 2009 12:54:34 +0000 (13:54 +0100)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Mon, 19 Oct 2009 13:27:38 +0000 (14:27 +0100)
This ensures that the setup cb isn't called on a destroyed object
(#598452).

libempathy-gtk/empathy-contact-list-store.c

index 5edcded95f06b95edf867ea91fb04a60234513c9..6d6e422bd02d539070876a773c4d385458910c5b 100644 (file)
@@ -63,6 +63,7 @@ typedef struct {
        gboolean                    show_active;
        EmpathyContactListStoreSort sort_criterium;
        guint                       inhibit_active;
+       guint                       setup_idle_id;
 } EmpathyContactListStorePriv;
 
 typedef struct {
@@ -193,6 +194,7 @@ contact_list_store_iface_setup (gpointer user_data)
        }
        g_list_free (contacts);
 
+       priv->setup_idle_id = 0;
        return FALSE;
 }
 
@@ -206,7 +208,7 @@ contact_list_store_set_contact_list (EmpathyContactListStore *store,
        priv->list = g_object_ref (list_iface);
 
        /* Let a chance to have all properties set before populating */
-       g_idle_add (contact_list_store_iface_setup, store);
+       priv->setup_idle_id = g_idle_add (contact_list_store_iface_setup, store);
 }
 
 static void
@@ -313,6 +315,10 @@ contact_list_store_finalize (GObject *object)
                g_source_remove (priv->inhibit_active);
        }
 
+       if (priv->setup_idle_id != 0) {
+               g_source_remove (priv->setup_idle_id);
+       }
+
        G_OBJECT_CLASS (empathy_contact_list_store_parent_class)->finalize (object);
 }