Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 58cebef081c94cb5f88b9fe2fbddfdc8 > files > 55

openais-0.80.6-28.el5_6.1.src.rpm

Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c	(revision 2168)
+++ exec/totemsrp.c	(revision 2169)
@@ -1617,6 +1617,8 @@
 	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);
 
@@ -1696,7 +1698,6 @@
 	 */
 	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,
@@ -1704,8 +1705,23 @@
 
 	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");
 	instance->memb_state = MEMB_STATE_OPERATIONAL;