# HG changeset patch # User Mikael Berthe # Date 1194903788 -3600 # Node ID 01e55874837929271753dbde91ecacea8418c444 # Parent c7e709719c43b60694e43d47a49252bc3e5342f8 Fix a race in roster_add_user() Thanks to franky for the detailed bug report. diff -r c7e709719c43 -r 01e558748379 mcabber/src/roster.c --- 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;