Signed-off-by: Steven Dake <sd...@redhat.com> --- exec/totemsrp.c | 47 ++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 42 insertions(+), 5 deletions(-)
diff --git a/exec/totemsrp.c b/exec/totemsrp.c index 4a299a0..a97ed49 100644 --- a/exec/totemsrp.c +++ b/exec/totemsrp.c @@ -1349,6 +1349,35 @@ static void memb_set_and_with_ring_id ( return; } +static void memb_set_and ( + struct srp_addr *set1, + int set1_entries, + struct srp_addr *set2, + int set2_entries, + struct srp_addr *and, + int *and_entries) +{ + int i; + int j; + int found = 0; + + *and_entries = 0; + + for (i = 0; i < set2_entries; i++) { + for (j = 0; j < set1_entries; j++) { + if (srp_addr_equal (&set1[j], &set2[i])) { + found = 1; + break; + } + } + if (found) { + srp_addr_copy (&and[*and_entries], &set1[j]); + *and_entries = *and_entries + 1; + } + found = 0; + } + return; +} #ifdef CODE_COVERAGE static void memb_set_print ( char *string, @@ -1718,6 +1747,8 @@ static void memb_state_operational_enter (struct totemsrp_instance *instance) unsigned int trans_memb_list_totemip[PROCESSOR_COUNT_MAX]; unsigned int new_memb_list_totemip[PROCESSOR_COUNT_MAX]; unsigned int left_list[PROCESSOR_COUNT_MAX]; + struct srp_addr difference_list[PROCESSOR_COUNT_MAX]; + int difference_list_entries = 0; unsigned int i; unsigned int res; @@ -1739,14 +1770,20 @@ static void memb_state_operational_enter (struct totemsrp_instance *instance) /* * Calculate joined and left list */ - memb_set_subtract (instance->my_left_memb_list, - &instance->my_left_memb_entries, + memb_set_subtract (difference_list, + &difference_list_entries, + instance->my_new_memb_list, instance->my_new_memb_entries, + instance->my_memb_list, instance->my_memb_entries); + + memb_set_and ( + difference_list, difference_list_entries, instance->my_memb_list, instance->my_memb_entries, - instance->my_trans_memb_list, instance->my_trans_memb_entries); + instance->my_left_memb_list, &instance->my_left_memb_entries); - memb_set_subtract (joined_list, &joined_list_entries, + memb_set_and ( + difference_list, difference_list_entries, instance->my_new_memb_list, instance->my_new_memb_entries, - instance->my_trans_memb_list, instance->my_trans_memb_entries); + joined_list, &joined_list_entries); /* * Install new membership -- 1.7.6 _______________________________________________ Openais mailing list Openais@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/openais