changeset 246:57f9005b8844

[/trunk] Changeset 259 by mikael * Fix a bug (segfault on buddy deletion) introduced when I added unread_list
author mikael
date Tue, 14 Jun 2005 19:37:11 +0000
parents 7ca7ca850270
children fca26cafb7c8
files mcabber/src/roster.c
diffstat 1 files changed, 7 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/roster.c	Tue Jun 14 19:36:29 2005 +0000
+++ b/mcabber/src/roster.c	Tue Jun 14 19:37:11 2005 +0000
@@ -167,20 +167,23 @@
   GSList *sl_user, *sl_group;
   GSList **sl_group_listptr;
   roster *roster_usr;
+  GSList *node;
 
   sl_user = roster_find(jid, jidsearch, ROSTER_TYPE_USER|ROSTER_TYPE_AGENT);
   if (sl_user == NULL)
     return;
-  // Let's free memory (jid, name)
   roster_usr = (roster*)sl_user->data;
+
+  // Remove (if present) from unread messages list
+  node = g_slist_find(unread_list, roster_usr);
+  if (node) unread_list = g_slist_delete_link(unread_list, node);
+
+  // Let's free memory (jid, name, status message)
   if (roster_usr->jid)        g_free((gchar*)roster_usr->jid);
   if (roster_usr->name)       g_free((gchar*)roster_usr->name);
   if (roster_usr->status_msg) g_free((gchar*)roster_usr->status_msg);
   g_free(roster_usr);
 
-  // Remove (if present) from unread messages list
-  unread_list = g_slist_delete_link(unread_list, sl_user);
-
   // That's a little complex, we need to dereference twice
   sl_group = ((roster*)sl_user->data)->list;
   sl_group_listptr = &((roster*)(sl_group->data))->list;