facebook: fixed a slew of issues with room lists facebook

Fri, 07 Aug 2015 18:35:41 -0400

author
James Geboski <jgeboski@gmail.com>
date
Fri, 07 Aug 2015 18:35:41 -0400
branch
facebook
changeset 37323
8cf22d7f1c83
parent 37322
75a1ebeb269a
child 37324
0519eee7aebf

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;
 }

mercurial