# HG changeset patch # User Daniel Atallah # Date 1197592702 0 # Node ID f123ad1ada0073d12f344d0195ca305f0723bd40 # Parent c85d1e9d9d2737666a087419ff60185800b978c0 Fix a GList being leaked when dealing with network connection/disconnection events. diff -r c85d1e9d9d27 -r f123ad1ada00 pidgin/gtkconn.c --- a/pidgin/gtkconn.c Thu Dec 13 06:53:07 2007 +0000 +++ b/pidgin/gtkconn.c Fri Dec 14 00:38:22 2007 +0000 @@ -184,36 +184,39 @@ static void pidgin_connection_network_connected () { - GList *list = purple_accounts_get_all_active(); + GList *list, *l; PidginBuddyList *gtkblist = pidgin_blist_get_default_gtk_blist(); if(gtkblist) pidgin_status_box_set_network_available(PIDGIN_STATUS_BOX(gtkblist->statusbox), TRUE); - while (list) { - PurpleAccount *account = (PurpleAccount*)list->data; + l = list = purple_accounts_get_all_active(); + while (l) { + PurpleAccount *account = (PurpleAccount*)l->data; g_hash_table_remove(auto_reconns, account); if (purple_account_is_disconnected(account)) do_signon(account); - list = list->next; + l = l->next; } + g_list_free(list); } static void pidgin_connection_network_disconnected () { - GList *l = purple_accounts_get_all_active(); + GList *list, *l; PidginBuddyList *gtkblist = pidgin_blist_get_default_gtk_blist(); PurplePluginProtocolInfo *prpl_info = NULL; PurpleConnection *gc = NULL; - + if(gtkblist) pidgin_status_box_set_network_available(PIDGIN_STATUS_BOX(gtkblist->statusbox), FALSE); + l = list = purple_accounts_get_all_active(); while (l) { PurpleAccount *a = (PurpleAccount*)l->data; if (!purple_account_is_disconnected(a)) { gc = purple_account_get_connection(a); - if (gc && gc->prpl) + if (gc && gc->prpl) prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); if (prpl_info) { if (prpl_info->keepalive) @@ -224,6 +227,7 @@ } l = l->next; } + g_list_free(list); } static void pidgin_connection_notice(PurpleConnection *gc, const char *text)