changeset 1366:01e558748379

Fix a race in roster_add_user() Thanks to franky for the detailed bug report.
author Mikael Berthe <mikael@lilotux.net>
date Mon, 12 Nov 2007 22:43:08 +0100
parents c7e709719c43
children cd0d63024923
files mcabber/src/roster.c
diffstat 1 files changed, 9 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/roster.c	Mon Nov 12 19:27:55 2007 +0100
+++ b/mcabber/src/roster.c	Mon Nov 12 22:43:08 2007 +0100
@@ -365,14 +365,18 @@
     // That's an update
     roster_usr = slist->data;
     roster_usr->subscription = esub;
+    if (onserver >= 0)
+      buddy_setonserverflag(slist->data, onserver);
     if (name)
       buddy_setname(slist->data, (char*)name);
     // Let's check if the group name has changed
     oldgroupname = ((roster*)((GSList*)roster_usr->list)->data)->name;
-    if (group && strcmp(oldgroupname, group))
+    if (group && strcmp(oldgroupname, group)) {
       buddy_setgroup(slist->data, (char*)group);
-    if (onserver != -1)
-      buddy_setonserverflag(slist->data, onserver);
+      // Note: buddy_setgroup() updates the user lists so we cannot
+      // use slist anymore.
+      return roster_find(jid, jidsearch, 0);
+    }
     return slist;
   }
   // #2 add group if necessary
@@ -892,6 +896,8 @@
 //  buddy_setgroup()
 // Change the group of current buddy
 //
+// Note: buddy_setgroup() updates the user lists.
+//
 void buddy_setgroup(gpointer rosterdata, char *newgroupname)
 {
   roster *roster_usr = rosterdata;