diff libpurple/protocols/bonjour/buddy.c @ 23092:2a81912c229a

Some fixes from Eion Robb and me to prevent bonjour crashes with the newly available offline buddies. Fixes #5873.
author Daniel Atallah <daniel.atallah@gmail.com>
date Thu, 22 May 2008 21:38:06 +0000
parents d50194ab3016
children fe7504f465a2 16734635febf
line wrap: on
line diff
--- a/libpurple/protocols/bonjour/buddy.c	Thu May 22 20:24:19 2008 +0000
+++ b/libpurple/protocols/bonjour/buddy.c	Thu May 22 21:38:06 2008 +0000
@@ -156,9 +156,9 @@
 		purple_blist_node_set_flags((PurpleBlistNode *)buddy, PURPLE_BLIST_NODE_FLAG_NO_SAVE);
 		purple_blist_add_buddy(buddy, NULL, group, NULL);
 	}
-	
+
 	buddy->proto_data = bonjour_buddy;
-	
+
 	/* Create the alias for the buddy using the first and the last name */
 	if (bonjour_buddy->nick)
 		serv_got_alias(purple_account_get_connection(account), buddy->name, bonjour_buddy->nick);
@@ -206,10 +206,12 @@
  * If the buddy is being saved, mark as offline, otherwise delete
  */
 void bonjour_buddy_signed_off(PurpleBuddy *pb) {
-	if (PURPLE_BLIST_NODE_SHOULD_SAVE(pb))
+	if (PURPLE_BLIST_NODE_SHOULD_SAVE(pb)) {
 		purple_prpl_got_user_status(purple_buddy_get_account(pb),
 					    purple_buddy_get_name(pb), "offline", NULL);
-	else {
+		bonjour_buddy_delete(pb->proto_data);
+		pb->proto_data = NULL;
+	} else {
 		purple_account_remove_buddy(purple_buddy_get_account(pb), pb, NULL);
 		purple_blist_remove_buddy(pb);
 	}