Reviewed-by: Jan Friesse <[email protected]> Steven Dake wrote: > 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");
_______________________________________________ Openais mailing list [email protected] https://lists.linux-foundation.org/mailman/listinfo/openais
