Resolve bug where config changes are delivered in the wrong order on nodes that

join and then open a cpg.


git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2225 fd59a12c-fef9-0310-b244-a6a79926bd2f
This commit is contained in:
Steven Dake 2009-06-09 20:31:51 +00:00
parent e2c5b834f0
commit 9c69184ce1

View File

@ -654,7 +654,10 @@ static void do_proc_join(
int reason)
{
struct process_info *pi;
struct process_info *pi_entry;
mar_cpg_address_t notify_info;
struct list_head *list;
struct list_head *list_to_add = NULL;
if (process_info_find (name, pid, nodeid) != NULL) {
return ;
@ -668,7 +671,22 @@ static void do_proc_join(
pi->pid = pid;
memcpy(&pi->group, name, sizeof(*name));
list_init(&pi->list);
list_add(&pi->list, &process_info_list_head);
/*
* Insert new process in sorted order so synchronization works properly
*/
list_to_add = &process_info_list_head;
for (list = process_info_list_head.next; list != &process_info_list_head; list = list->next) {
pi_entry = list_entry(list, struct process_info, list);
if (pi_entry->nodeid > pi->nodeid ||
(pi_entry->nodeid == pi->nodeid && pi_entry->pid > pi->pid)) {
break;
}
list_to_add = list;
}
list_splice (&pi->list, list_to_add);
notify_info.pid = pi->pid;
notify_info.nodeid = nodeid;