Fri, 07 Aug 2015 18:35:41 -0400
facebook: fixed a slew of issues with room lists
This addresses:
- Canceled requests leading to warnings spewing
- Doubly freeing the PurpleRoomlist
- More than one PurpleRoomlist leaking
- Progress always being FALSE
| libpurple/protocols/facebook/data.c | file | annotate | diff | comparison | revisions | |
| libpurple/protocols/facebook/facebook.c | file | annotate | diff | comparison | revisions |
--- a/libpurple/protocols/facebook/data.c Fri Aug 07 16:24:34 2015 -0400 +++ b/libpurple/protocols/facebook/data.c Fri Aug 07 18:35:41 2015 -0400 @@ -57,10 +57,6 @@ g_object_unref(priv->api); } - if (priv->roomlist != NULL) { - g_object_unref(priv->roomlist); - } - g_hash_table_destroy(priv->icons); g_hash_table_destroy(priv->icona); }
--- a/libpurple/protocols/facebook/facebook.c Fri Aug 07 16:24:34 2015 -0400 +++ b/libpurple/protocols/facebook/facebook.c Fri Aug 07 18:35:41 2015 -0400 @@ -369,6 +369,11 @@ PurpleRoomlistRoom *room; list = fb_data_get_roomlist(fata); + + if (G_UNLIKELY(list == NULL)) { + return; + } + gstr = g_string_new(NULL); for (l = thrds; l != NULL; l = l->next) { @@ -394,6 +399,7 @@ } purple_roomlist_set_in_progress(list, FALSE); + fb_data_set_roomlist(fata, NULL); g_string_free(gstr, TRUE); } @@ -852,6 +858,9 @@ PurpleRoomlistField *fld; fata = purple_connection_get_protocol_data(gc); + list = fb_data_get_roomlist(fata); + g_return_val_if_fail(list == NULL, NULL); + api = fb_data_get_api(fata); acct = purple_connection_get_account(gc); list = purple_roomlist_new(acct); @@ -868,6 +877,7 @@ flds = g_list_reverse(flds); purple_roomlist_set_fields(list, flds); + purple_roomlist_set_in_progress(list, TRUE); fb_api_thread_list(api); return list; }