Reviewed-by: Steven Dake <[email protected]> On 03/29/2011 02:55 AM, Jan Friesse wrote: > Backport of Corosync 0fcf760977a73ef78bacff47e61c30ba21929faa > > 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: Jan Friesse <[email protected]> > --- > branches/whitetank/exec/totemsrp.c | 20 ++++++++++++++++++-- > 1 files changed, 18 insertions(+), 2 deletions(-) > > diff --git a/branches/whitetank/exec/totemsrp.c > b/branches/whitetank/exec/totemsrp.c > index aa73471..2937070 100644 > --- a/branches/whitetank/exec/totemsrp.c > +++ b/branches/whitetank/exec/totemsrp.c > @@ -1616,6 +1616,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, j; > + unsigned int res; > > memb_consensus_reset (instance); > > @@ -1695,7 +1697,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); > > instance->my_proc_list_entries = instance->my_new_memb_entries; > memcpy (instance->my_proc_list, instance->my_new_memb_list, > @@ -1703,7 +1704,22 @@ 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; > + for (j = 0; j < regular_message->iov_len; j++) { > + free (regular_message->iovec[j].iov_base); > + } > + } > + } > + sq_items_release (&instance->regular_sort_queue, > instance->my_high_delivered); > + instance->last_released = instance->my_high_delivered; > > log_printf (instance->totemsrp_log_level_notice, > "entering OPERATIONAL state.\n");
_______________________________________________ Openais mailing list [email protected] https://lists.linux-foundation.org/mailman/listinfo/openais
