Relying on messages_free may seem like it should work, but it leads to a situation where every node has released the messages, yet some nodes think messages are missing. The output then looks like "Retransmit: #" in repitition. This patch frees those messages immediately during the transition to the OPERATIONAL state and sets the internal variables totemsrp depends upon to the proper values.
Signed-off-by: Steven Dake <[email protected]> --- exec/totemsrp.c | 18 ++++++++++++++++-- 1 files changed, 16 insertions(+), 2 deletions(-) diff --git a/exec/totemsrp.c b/exec/totemsrp.c index 7314616..3731357 100644 --- a/exec/totemsrp.c +++ b/exec/totemsrp.c @@ -1713,6 +1713,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]; + unsigned int i; + unsigned int res; memb_consensus_reset (instance); @@ -1787,7 +1789,6 @@ static void memb_state_operational_enter (struct totemsrp_instance *instance) */ sq_copy (&instance->regular_sort_queue, &instance->recovery_sort_queue); instance->my_last_aru = SEQNO_START_MSG; - sq_items_release (&instance->regular_sort_queue, SEQNO_START_MSG - 1); /* When making my_proc_list smaller, ensure that the * now non-used entries are zero-ed out. There are some suspect @@ -1804,7 +1805,20 @@ static void memb_state_operational_enter (struct totemsrp_instance *instance) instance->my_failed_list_entries = 0; instance->my_high_delivered = instance->my_aru; -// TODO the recovery messages are leaked + + for (i = 0; i <= instance->my_high_delivered; i++) { + void *ptr; + + res = sq_item_get (&instance->regular_sort_queue, i, &ptr); + if (res == 0) { + struct sort_queue_item *regular_message; + + regular_message = ptr; + free (regular_message->mcast); + } + } + sq_items_release (&instance->regular_sort_queue, instance->my_high_delivered); + instance->last_released = instance->my_high_delivered; log_printf (instance->totemsrp_log_level_debug, "entering OPERATIONAL state.\n"); -- 1.7.4 _______________________________________________ Openais mailing list [email protected] https://lists.linux-foundation.org/mailman/listinfo/openais
