pidgin: 571d5bf2: We have a prpl function "buddy_free" tha...

markdoliner at pidgin.im markdoliner at pidgin.im
Wed Dec 17 21:05:42 EST 2008


-----------------------------------------------------------------
Revision: 571d5bf2fff9e937663ef53a174ae141999d6de2
Ancestor: 0bb430874c7ebe013414d3b52b6d7166a3a1c4d0
Author: markdoliner at pidgin.im
Date: 2008-12-18T02:03:20
Branch: im.pidgin.pidgin
URL: http://d.pidgin.im/viewmtn/revision/info/571d5bf2fff9e937663ef53a174ae141999d6de2

Modified files:
        libpurple/blist.c

ChangeLog: 

We have a prpl function "buddy_free" that I don't think any of our
in-tree prpls use, and it wasn't called from anywhere.  But the facebook
prpl uses it to free data associated with each buddy.  I think it
makes sense to call this function.  In the future it would probably be
cleaner to have prpls attach to a signal or something.

-------------- next part --------------
============================================================
--- libpurple/blist.c	8f1b91cf2a8d7b96138086a2e62a9f63381a31d7
+++ libpurple/blist.c	4e627c53cafca716623b20e2c337918ee225ee7c
@@ -1810,6 +1810,8 @@ void purple_blist_remove_buddy(PurpleBud
 	PurpleContact *contact;
 	PurpleGroup *group;
 	struct _purple_hbuddy hb;
+	PurplePlugin *prpl;
+	PurplePluginProtocolInfo *prpl_info;
 
 	g_return_if_fail(buddy != NULL);
 
@@ -1865,6 +1867,15 @@ void purple_blist_remove_buddy(PurpleBud
 	/* Signal that the buddy has been removed before freeing the memory for it */
 	purple_signal_emit(purple_blist_get_handle(), "buddy-removed", buddy);
 
+	/*
+	 * Tell the owner PRPL that we're about to free the buddy so it
+	 * can free proto_data
+	 */
+	prpl = purple_find_prpl(purple_account_get_protocol_id(buddy->account));
+	prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
+	if (prpl_info && prpl_info->buddy_free)
+		prpl_info->buddy_free(buddy);
+
 	/* Delete the node */
 	purple_buddy_icon_unref(buddy->icon);
 	g_hash_table_destroy(buddy->node.settings);


More information about the Commits mailing list