]> www.infradead.org Git - pidgin-chime.git/commitdiff
Disconnect signals before tearing down state
authorDavid Woodhouse <dwmw@amazon.co.uk>
Sat, 9 Dec 2017 08:59:38 +0000 (08:59 +0000)
committerDavid Woodhouse <dwmw@amazon.co.uk>
Sat, 9 Dec 2017 09:18:05 +0000 (09:18 +0000)
Otherwise, the new-meeting and other signals could fire and add things
back when we're tearing it down.

chime.c

diff --git a/chime.c b/chime.c
index 5e822b1b322688b95416b4c3cd72ec7b74036ef1..f19578bfd3600cff1b32a1d27dda90d0d99f47a8 100644 (file)
--- a/chime.c
+++ b/chime.c
@@ -235,15 +235,16 @@ static void chime_purple_close(PurpleConnection *conn)
 {
        struct purple_chime *pc = purple_connection_get_protocol_data(conn);
 
+       chime_connection_foreach_contact(pc->cxn, (ChimeContactCB)disconnect_contact, conn);
+
+       g_signal_handlers_disconnect_matched(pc->cxn, G_SIGNAL_MATCH_DATA,
+                                            0, 0, NULL, NULL, conn);
+
        purple_chime_destroy_meetings(conn);
        purple_chime_destroy_messages(conn);
        purple_chime_destroy_conversations(pc);
        purple_chime_destroy_chats(pc);
 
-       chime_connection_foreach_contact(pc->cxn, (ChimeContactCB)disconnect_contact, conn);
-
-       g_signal_handlers_disconnect_matched(pc->cxn, G_SIGNAL_MATCH_DATA,
-                                            0, 0, NULL, NULL, conn);
        chime_connection_disconnect(pc->cxn);
        g_clear_object(&pc->cxn);
        g_free(pc);