Signed-off-by: Steven Dake <[email protected]>
---
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
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais