Mercurial > ~mikael > mcabber > hg
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; |