comparison mcabber/src/roster.c @ 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 9716cf8a0726
children cd9182f0b5c7
comparison
equal deleted inserted replaced
1365:c7e709719c43 1366:01e558748379
363 if (slist) { 363 if (slist) {
364 char *oldgroupname; 364 char *oldgroupname;
365 // That's an update 365 // That's an update
366 roster_usr = slist->data; 366 roster_usr = slist->data;
367 roster_usr->subscription = esub; 367 roster_usr->subscription = esub;
368 if (onserver >= 0)
369 buddy_setonserverflag(slist->data, onserver);
368 if (name) 370 if (name)
369 buddy_setname(slist->data, (char*)name); 371 buddy_setname(slist->data, (char*)name);
370 // Let's check if the group name has changed 372 // Let's check if the group name has changed
371 oldgroupname = ((roster*)((GSList*)roster_usr->list)->data)->name; 373 oldgroupname = ((roster*)((GSList*)roster_usr->list)->data)->name;
372 if (group && strcmp(oldgroupname, group)) 374 if (group && strcmp(oldgroupname, group)) {
373 buddy_setgroup(slist->data, (char*)group); 375 buddy_setgroup(slist->data, (char*)group);
374 if (onserver != -1) 376 // Note: buddy_setgroup() updates the user lists so we cannot
375 buddy_setonserverflag(slist->data, onserver); 377 // use slist anymore.
378 return roster_find(jid, jidsearch, 0);
379 }
376 return slist; 380 return slist;
377 } 381 }
378 // #2 add group if necessary 382 // #2 add group if necessary
379 slist = roster_add_group(group); 383 slist = roster_add_group(group);
380 if (!slist) return NULL; 384 if (!slist) return NULL;
890 } 894 }
891 895
892 // buddy_setgroup() 896 // buddy_setgroup()
893 // Change the group of current buddy 897 // Change the group of current buddy
894 // 898 //
899 // Note: buddy_setgroup() updates the user lists.
900 //
895 void buddy_setgroup(gpointer rosterdata, char *newgroupname) 901 void buddy_setgroup(gpointer rosterdata, char *newgroupname)
896 { 902 {
897 roster *roster_usr = rosterdata; 903 roster *roster_usr = rosterdata;
898 GSList **sl_group; 904 GSList **sl_group;
899 GSList *sl_newgroup; 905 GSList *sl_newgroup;