# HG changeset patch # User Paul Aurich # Date 1247367336 0 # Node ID cbee8aecc90a4f3a207580f71e711fe0ca1b959c # Parent 5345dfe482725b2a6dc8bad3a04356b96b347178 Free the buddy list data some more at shutdown and some deprecations. I think these deprecations are reasonable. Basically, purple_blist_init should create a PurpleBuddyList*, so each UI doesn't need to do that. The UI data for the PurpleBuddyList is more tightly coupled with the PurpleBuddyList and purple_blist_destroy is called in purple_blist_uninit (and is fully cleaned up now). As libpurple works currently, I believe it's not really possible to have multiple PurpleBuddyLists around (blist.c relies on a single global variable) and when it was discussed on the mailing list a few months ago, nobody was using it as such. Refs #9253 (going to milestone 3.0.0 it). diff -r 5345dfe48272 -r cbee8aecc90a ChangeLog.API --- a/ChangeLog.API Sat Jul 11 21:53:52 2009 +0000 +++ b/ChangeLog.API Sun Jul 12 02:55:36 2009 +0000 @@ -82,9 +82,12 @@ Deprecated: * buddy-added and buddy-removed blist signals + * purple_blist_destroy + * purple_blist_new * purple_buddy_get_local_alias + * purple_ip_address_is_valid * purple_notify_user_info_remove_entry - * purple_ip_address_is_valid + * purple_set_blist * purple_status_type_set_primary_attr * purple_status_type_add_attr * purple_status_type_add_attrs diff -r 5345dfe48272 -r cbee8aecc90a libpurple/blist.c --- a/libpurple/blist.c Sat Jul 11 21:53:52 2009 +0000 +++ b/libpurple/blist.c Sun Jul 12 02:55:36 2009 +0000 @@ -3105,6 +3105,8 @@ purple_blist_sync(); } + purple_blist_destroy(); + node = purple_blist_get_root(); while (node) { next_node = node->next; @@ -3112,10 +3114,14 @@ node = next_node; } purplebuddylist->root = NULL; - + g_hash_table_destroy(purplebuddylist->buddies); g_hash_table_destroy(buddies_cache); + PURPLE_DBUS_UNREGISTER_POINTER(purplebuddylist); + g_free(purplebuddylist); + purplebuddylist = NULL; + purple_signals_disconnect_by_handle(purple_blist_get_handle()); purple_signals_unregister_by_instance(purple_blist_get_handle()); } diff -r 5345dfe48272 -r cbee8aecc90a libpurple/blist.h --- a/libpurple/blist.h Sat Jul 11 21:53:52 2009 +0000 +++ b/libpurple/blist.h Sun Jul 12 02:55:36 2009 +0000 @@ -235,6 +235,7 @@ * Creates a new buddy list * * @return The new buddy list. + * @deprecated In 3.0.0, this will be handled by purple_blist_init() */ PurpleBuddyList *purple_blist_new(void); @@ -242,6 +243,7 @@ * Sets the main buddy list. * * @param blist The buddy list you want to use. + * @deprecated In 3.0.0, this will be handled by purple_blist_init() */ void purple_set_blist(PurpleBuddyList *blist); @@ -383,6 +385,10 @@ /** * Destroys the buddy list window. + * + * @deprecated The UI is responsible for cleaning up the + * PurpleBuddyList->ui_data. purple_blist_uninit() will free the + * PurpleBuddyList* itself. */ void purple_blist_destroy(void); diff -r 5345dfe48272 -r cbee8aecc90a pidgin/gtkblist.c --- a/pidgin/gtkblist.c Sat Jul 11 21:53:52 2009 +0000 +++ b/pidgin/gtkblist.c Sun Jul 12 02:55:36 2009 +0000 @@ -6714,14 +6714,15 @@ #endif } - static void pidgin_blist_destroy(PurpleBuddyList *list) { PidginBuddyListPrivate *priv; - if (!gtkblist) + if (!list || !list->ui_data) return; + g_return_if_fail(list->ui_data != gtkblist); + purple_signals_disconnect_by_handle(gtkblist); if (gtkblist->headline_close)