Mercurial > hg
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;