gatchat: Don't try to cleanup twice
authorDenis Kenzior <denkenz@gmail.com>
Wed, 28 Apr 2010 03:46:46 +0000 (22:46 -0500)
committerDenis Kenzior <denkenz@gmail.com>
Wed, 28 Apr 2010 22:27:35 +0000 (17:27 -0500)
In case we get unrefed from the disconnect callback

gatchat/gatchat.c

index 39c9545..f94605f 100644 (file)
@@ -270,8 +270,6 @@ static void chat_cleanup(GAtChat *chat)
        g_at_syntax_unref(chat->syntax);
        chat->syntax = NULL;
 
-       chat->io = NULL;
-
        if (chat->terminator_list) {
                g_slist_foreach(chat->terminator_list,
                                        (GFunc)free_terminator, NULL);
@@ -284,9 +282,9 @@ static void io_disconnect(gpointer user_data)
 {
        GAtChat *chat = user_data;
 
-       g_at_io_set_read_handler(chat->io, NULL, NULL);
-       g_at_io_unref(chat->io);
        chat_cleanup(chat);
+       g_at_io_unref(chat->io);
+       chat->io = NULL;
 
        if (chat->user_disconnect)
                chat->user_disconnect(chat->user_disconnect_data);
@@ -926,13 +924,12 @@ void g_at_chat_unref(GAtChat *chat)
        if (is_zero == FALSE)
                return;
 
-       if (chat->write_watch)
-               g_source_remove(chat->write_watch);
-
-       g_at_chat_suspend(chat);
-
-       g_at_io_unref(chat->io);
-       chat_cleanup(chat);
+       if (chat->io) {
+               g_at_chat_suspend(chat);
+               g_at_io_unref(chat->io);
+               chat->io = NULL;
+               chat_cleanup(chat);
+       }
 
        if (chat->in_read_handler)
                chat->destroyed = TRUE;