rpms/openais/F-9 revision-1406.patch, NONE, 1.1 revision-1407.patch, NONE, 1.1 revision-1408.patch, NONE, 1.1 revision-1409.patch, NONE, 1.1 revision-1410.patch, NONE, 1.1 revision-1413.patch, NONE, 1.1 revision-1414.patch, NONE, 1.1 revision-1415.patch, NONE, 1.1 revision-1416.patch, NONE, 1.1 revision-1419.patch, NONE, 1.1 revision-1423.patch, NONE, 1.1 revision-1426.patch, NONE, 1.1 revision-1446.patch, NONE, 1.1 revision-1449.patch, NONE, 1.1 revision-1450.patch, NONE, 1.1 revision-1453.patch, NONE, 1.1 revision-1455.patch, NONE, 1.1 revision-1464.patch, NONE, 1.1 revision-1465.patch, NONE, 1.1 revision-1469.patch, NONE, 1.1 revision-1471.patch, NONE, 1.1 revision-1473.patch, NONE, 1.1 revision-1477.patch, NONE, 1.1 revision-1478.patch, NONE, 1.1 revision-1479.patch, NONE, 1.1 revision-1480.patch, NONE, 1.1 revision-1486.patch, NONE, 1.1 revision-1493.patch, NONE, 1.1 revision-1496.patch, NONE, 1.1 revision-1497.patch, NONE, 1.1 revision-1498.patch, NONE, 1.1 revision-1499.patch, NONE, 1.1 revision-1500.patch, NONE, 1.1 revision-1501.patch, NONE, 1.1 revision-1502.patch, NONE, 1.1 revision-1503.patch, NONE, 1.1 revision-1504.patch, NONE, 1.1 revision-1506.patch, NONE, 1.1 revision-1507.patch, NONE, 1.1 revision-1508.patch, NONE, 1.1 revision-1509.patch, NONE, 1.1 revision-1510.patch, NONE, 1.1 revision-1511.patch, NONE, 1.1 revision-1512.patch, NONE, 1.1 revision-1513.patch, NONE, 1.1 revision-1514.patch, NONE, 1.1 revision-1521.patch, NONE, 1.1 revision-1524.patch, NONE, 1.1 revision-1546.patch, NONE, 1.1 revision-1548.patch, NONE, 1.1 .cvsignore, 1.7, 1.8 openais.spec, 1.22, 1.23 sources, 1.7, 1.8 openais-0.80.1-gnusource.patch, 1.1, NONE openais-0.80.1-open-fix.patch, 1.1, NONE revision-1223.patch, 1.1, NONE revision-1230.patch, 1.1, NONE revision-1245.patch, 1.1, NONE revision-1246.patch, 1.1, NONE revision-1248.patch, 1.1, NONE revision-1252.patch, 1.1, NONE revision-1256.patch, 1.1, NONE revision-1257.patch, 1.1, NONE revision-1258.patch, 1.1, NONE revision-1260.patch, 1.1, NONE revision-1261.patch, 1.1, NONE revision-1262.patch, 1.1, NONE revision-1263.patch, 1.1, NONE revision-1264.patch, 1.1, NONE revision-1265.patch, 1.1, NONE

Steven Dake (sdake) fedora-extras-commits at redhat.com
Thu May 29 21:29:43 UTC 2008


Author: sdake

Update of /cvs/pkgs/rpms/openais/F-9
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv18659/F-9

Modified Files:
	.cvsignore openais.spec sources 
Added Files:
	revision-1406.patch revision-1407.patch revision-1408.patch 
	revision-1409.patch revision-1410.patch revision-1413.patch 
	revision-1414.patch revision-1415.patch revision-1416.patch 
	revision-1419.patch revision-1423.patch revision-1426.patch 
	revision-1446.patch revision-1449.patch revision-1450.patch 
	revision-1453.patch revision-1455.patch revision-1464.patch 
	revision-1465.patch revision-1469.patch revision-1471.patch 
	revision-1473.patch revision-1477.patch revision-1478.patch 
	revision-1479.patch revision-1480.patch revision-1486.patch 
	revision-1493.patch revision-1496.patch revision-1497.patch 
	revision-1498.patch revision-1499.patch revision-1500.patch 
	revision-1501.patch revision-1502.patch revision-1503.patch 
	revision-1504.patch revision-1506.patch revision-1507.patch 
	revision-1508.patch revision-1509.patch revision-1510.patch 
	revision-1511.patch revision-1512.patch revision-1513.patch 
	revision-1514.patch revision-1521.patch revision-1524.patch 
	revision-1546.patch revision-1548.patch 
Removed Files:
	openais-0.80.1-gnusource.patch openais-0.80.1-open-fix.patch 
	revision-1223.patch revision-1230.patch revision-1245.patch 
	revision-1246.patch revision-1248.patch revision-1252.patch 
	revision-1256.patch revision-1257.patch revision-1258.patch 
	revision-1260.patch revision-1261.patch revision-1262.patch 
	revision-1263.patch revision-1264.patch revision-1265.patch 
Log Message:
Update fedora 9 cluster packages to latest release.


revision-1406.patch:

--- NEW FILE revision-1406.patch ---
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c	(revision 1405)
+++ exec/totemsrp.c	(revision 1406)
@@ -393,8 +393,6 @@
 
 	unsigned int my_token_seq;
 
-	unsigned int my_commit_token_seq;
-
 	/*
 	 * Timers
 	 */
@@ -619,8 +617,6 @@
 
 	instance->my_token_seq = SEQNO_START_TOKEN - 1;
 
-	instance->my_commit_token_seq = SEQNO_START_TOKEN - 1;
-
 	instance->memb_state = MEMB_STATE_OPERATIONAL;
 
 	instance->set_aru = -1;
@@ -1646,8 +1642,6 @@
 	struct totemsrp_instance *instance,
 	int gather_from)
 {
-	instance->my_commit_token_seq = SEQNO_START_TOKEN - 1;
-
 	memb_set_merge (
 		&instance->my_id, 1,
 		instance->my_proc_list, &instance->my_proc_list_entries);
@@ -1733,8 +1727,6 @@
 
 	instance->memb_state = MEMB_STATE_COMMIT;
 
-	instance->my_commit_token_seq = SEQNO_START_TOKEN - 1;
-
 	/*
 	 * reset all flow control variables since we are starting a new ring
 	 */
@@ -3961,16 +3953,6 @@
 	addr = (struct srp_addr *)memb_commit_token->end_of_commit_token;
 	memb_list = (struct memb_commit_token_memb_entry *)(addr + memb_commit_token->addr_entries);
 
-	if (sq_lte_compare (memb_commit_token->token_seq,
-		instance->my_commit_token_seq)) {
-		/*
-		 * discard token
-		 */
-		return (0);
-	}
-	instance->my_commit_token_seq = memb_commit_token->token_seq;
-
-
 #ifdef TEST_DROP_COMMIT_TOKEN_PERCENTAGE
 	if (random()%100 < TEST_DROP_COMMIT_TOKEN_PERCENTAGE) {
 		return (0);
@@ -3998,9 +3980,15 @@
 			break;
 
 		case MEMB_STATE_COMMIT:
-//			if (memcmp (&memb_commit_token->ring_id, &instance->my_ring_id,
-//				sizeof (struct memb_ring_id)) == 0) {
-			 if (memb_commit_token->ring_id.seq == instance->my_ring_id.seq) {
+			/*
+			 * If retransmitted commit tokens are sent on this ring
+			 * filter them out and only enter recovery once the
+			 * commit token has traversed the array.  This is
+			 * determined by :
+		 	 * memb_commit_token->memb_index == memb_commit_token->addr_entries) {
+			 */
+			 if (memb_commit_token->ring_id.seq == instance->my_ring_id.seq &&
+				memb_commit_token->memb_index == memb_commit_token->addr_entries) {
 				memb_state_recovery_enter (instance, memb_commit_token);
 			}
 			break;

revision-1407.patch:

--- NEW FILE revision-1407.patch ---
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c	(revision 1406)
+++ exec/totemsrp.c	(revision 1407)
@@ -1548,6 +1548,8 @@
 	unsigned int new_memb_list_totemip[PROCESSOR_COUNT_MAX];
 	unsigned int left_list[PROCESSOR_COUNT_MAX];
 
+	memb_consensus_reset (instance);
+
 	old_ring_state_reset (instance);
 	ring_reset (instance);
 	deliver_messages_from_recovery_to_regular (instance);

revision-1408.patch:

--- NEW FILE revision-1408.patch ---
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c	(revision 1407)
+++ exec/totemsrp.c	(revision 1408)
@@ -549,7 +549,8 @@
 	int fcc_mcasts_allowed);
 static void messages_free (struct totemsrp_instance *instance, unsigned int token_aru);
 
-static void memb_ring_id_store (struct totemsrp_instance *instance);
+static void memb_ring_id_set_and_store (struct totemsrp_instance *instance,
+	struct memb_ring_id *ring_id);
 static void memb_state_commit_token_update (struct totemsrp_instance *instance, struct memb_commit_token *commit_token);
 static void memb_state_commit_token_target_set (struct totemsrp_instance *instance, struct memb_commit_token *commit_token);
 static int memb_state_commit_token_send (struct totemsrp_instance *instance, struct memb_commit_token *memb_commit_token);
@@ -1707,10 +1708,10 @@
 
 	memb_state_commit_token_target_set (instance, commit_token);
 
+	memb_ring_id_set_and_store (instance, &commit_token->ring_id);
+
 	memb_state_commit_token_send (instance, commit_token);
 
-	memcpy (&instance->my_ring_id, &commit_token->ring_id,
-		sizeof (struct memb_ring_id));
 	instance->token_ring_id_seq = instance->my_ring_id.seq;
 
 	poll_timer_delete (instance->totemsrp_poll_handle, instance->memb_timer_state_gather_join_timeout);
@@ -1920,7 +1921,6 @@
 
 	reset_token_timeout (instance); // REVIEWED
 	reset_token_retransmit_timeout (instance); // REVIEWED
-	memb_ring_id_store (instance);
 
 	instance->memb_state = MEMB_STATE_RECOVERY;
 	return;
@@ -2829,6 +2829,7 @@
 		}
 		res = write (fd, &memb_ring_id->seq, sizeof (unsigned long long));
 		assert (res == sizeof (unsigned long long));
+		fsync (fd);
 		close (fd);
 	} else {
 		log_printf (instance->totemsrp_log_level_warning,
@@ -2840,13 +2841,16 @@
 	instance->token_ring_id_seq = memb_ring_id->seq;
 }
 
-static void memb_ring_id_store (
-	struct totemsrp_instance *instance)
+static void memb_ring_id_set_and_store (
+	struct totemsrp_instance *instance,
+	struct memb_ring_id *ring_id)
 {
 	char filename[256];
 	int fd;
 	int res;
 
+	memcpy (&instance->my_ring_id, ring_id, sizeof (struct memb_ring_id));
+
 	sprintf (filename, "%s/ringid_%s",
 		rundir, totemip_print (&instance->my_id.addr[0]));
 
@@ -2866,6 +2870,7 @@
 	//assert (fd > 0);
 	res = write (fd, &instance->my_ring_id.seq, sizeof (unsigned long long));
 	assert (res == sizeof (unsigned long long));
+	fsync (fd);
 	close (fd);
 }
 

revision-1409.patch:

--- NEW FILE revision-1409.patch ---
Index: exec/totempg.c
===================================================================
--- exec/totempg.c	(revision 1408)
+++ exec/totempg.c	(revision 1409)
@@ -870,13 +870,14 @@
 /*
  * Determine if a message of msg_size could be queued
  */
+#define FUZZY_AVAIL_SUBTRACT 5
 static int send_ok (
 	int msg_size)
 {
 	int avail = 0;
 	int total;
 
-	avail = totemmrp_avail ();
+	avail = totemmrp_avail () - FUZZY_AVAIL_SUBTRACT;
 	
 	/*
 	 * msg size less then totempg_totem_config->net_mtu - 25 will take up

revision-1410.patch:

--- NEW FILE revision-1410.patch ---
Index: test/testckpt.c
===================================================================
--- test/testckpt.c	(revision 1409)
+++ test/testckpt.c	(revision 1410)
@@ -341,7 +341,7 @@
 	timersub (&tv_end, &tv_start, &tv_elapsed);
 	printf ("Elapsed Time to expiry is %ld & %ld usec (should be about %d seconds)\n",
 		tv_elapsed.tv_sec,
-		tv_elapsed.tv_usec,
+		(long) tv_elapsed.tv_usec,
 		SECONDS_TO_EXPIRE);
 
 	error = saCkptCheckpointRetentionDurationSet (checkpointHandle,

revision-1413.patch:

--- NEW FILE revision-1413.patch ---
Index: exec/ipc.c
===================================================================
--- exec/ipc.c	(revision 1410)
+++ exec/ipc.c	(revision 1413)
@@ -369,7 +369,8 @@
 	
 	pthread_attr_destroy (&conn_info->thread_attr);
 	pthread_mutex_destroy (&conn_info->mutex);
-	
+	pthread_mutex_destroy (&conn_info->flow_control_mutex);
+
 	list_del (&conn_info->list);
 	free (conn_info);
 }
Index: lib/evt.c
===================================================================
--- lib/evt.c	(revision 1410)
+++ lib/evt.c	(revision 1413)
@@ -245,6 +245,9 @@
 		saHandleDestroy(&channel_handle_db, handle);
 		saHandleInstancePut(&channel_handle_db, handle);
 	}
+
+	pthread_mutex_destroy(&evti->ei_dispatch_mutex);
+	pthread_mutex_destroy(&evti->ei_response_mutex);
 }
 
 /*
@@ -272,6 +275,7 @@
 		saEvtEventFree(handle);
 	}
 
+	pthread_mutex_destroy(&eci->eci_mutex);
 }
 
 /*
@@ -296,6 +300,8 @@
 	if (edi->edi_event_data) {
 		free(edi->edi_event_data);
 	}
+
+	pthread_mutex_destroy(&edi->edi_mutex);
 }
 
 static SaAisErrorT evt_recv_event(int fd, struct lib_event_data **msg)
Index: lib/cfg.c
===================================================================
--- lib/cfg.c	(revision 1410)
+++ lib/cfg.c	(revision 1413)
@@ -88,6 +88,10 @@
  */
 void cfg_handleInstanceDestructor (void *instance)
 {
+	struct cfg_instance *cfg_instance = instance;
+
+	pthread_mutex_destroy (&cfg_instance->response_mutex);
+	pthread_mutex_destroy (&cfg_instance->dispatch_mutex);
 }
 
 SaAisErrorT
Index: lib/ckpt.c
===================================================================
--- lib/ckpt.c	(revision 1410)
+++ lib/ckpt.c	(revision 1413)
@@ -155,15 +155,24 @@
  */
 void ckptHandleInstanceDestructor (void *instance)
 {
+	struct ckptInstance *ckptInstance = instance;
+
+	pthread_mutex_destroy (&ckptInstance->response_mutex);
+	pthread_mutex_destroy (&ckptInstance->dispatch_mutex);
 }
 
 void checkpointHandleInstanceDestructor (void *instance)
 {
-	return;
+	struct ckptCheckpointInstance *checkpointInstance = instance;
+
+	pthread_mutex_destroy (&checkpointInstance->response_mutex);
 }
 
 void ckptSectionIterationHandleInstanceDestructor (void *instance)
 {
+	struct ckptSectionIterationInstance *iterationInstance = instance;
+
+	pthread_mutex_destroy (&iterationInstance->response_mutex);
 }
 
 static void ckptSectionIterationInstanceFinalize (struct ckptSectionIterationInstance *ckptSectionIterationInstance)
Index: lib/amf.c
===================================================================
--- lib/amf.c	(revision 1410)
+++ lib/amf.c	(revision 1413)
@@ -101,6 +101,10 @@
 
 void amfHandleInstanceDestructor (void *instance)
 {
+	struct amfInstance *amfInstance = instance;
+
+	pthread_mutex_destroy (&amfInstance->response_mutex);
+	pthread_mutex_destroy (&amfInstance->dispatch_mutex);
 }
 
 SaAisErrorT
Index: lib/lck.c
===================================================================
--- lib/lck.c	(revision 1410)
+++ lib/lck.c	(revision 1413)
@@ -144,11 +144,14 @@
  */
 void lckHandleInstanceDestructor (void *instance)
 {
+	struct lckInstance *lckInstance = instance;
+
+	pthread_mutex_destroy (&lckInstance->response_mutex);
+	pthread_mutex_destroy (&lckInstance->dispatch_mutex);
 }
 
 void lckResourceHandleInstanceDestructor (void *instance)
 {
-	return;
 }
 
 void lckResourceHandleLockIdInstanceDestructor (void *instance)
Index: lib/cpg.c
===================================================================
--- lib/cpg.c	(revision 1410)
+++ lib/cpg.c	(revision 1413)
@@ -76,6 +76,10 @@
  */
 static void cpg_instance_destructor (void *instance)
 {
+	struct cpg_inst *cpg_inst = instance;
+
+	pthread_mutex_destroy (&cpg_inst->response_mutex);
+	pthread_mutex_destroy (&cpg_inst->dispatch_mutex);
 }
 
 
Index: lib/clm.c
===================================================================
--- lib/clm.c	(revision 1410)
+++ lib/clm.c	(revision 1413)
@@ -92,6 +92,10 @@
 
 void clmHandleInstanceDestructor (void *instance)
 {
+	struct clmInstance *clmInstance = instance;
+
+	pthread_mutex_destroy (&clmInstance->response_mutex);
+	pthread_mutex_destroy (&clmInstance->dispatch_mutex);
 }
 
 
Index: lib/msg.c
===================================================================
--- lib/msg.c	(revision 1410)
+++ lib/msg.c	(revision 1413)
@@ -131,11 +131,14 @@
  */
 void msgHandleInstanceDestructor (void *instance)
 {
+	struct msgInstance *msgInstance = instance;
+
+	pthread_mutex_destroy (&msgInstance->response_mutex);
+	pthread_mutex_destroy (&msgInstance->dispatch_mutex);
 }
 
 void queueHandleInstanceDestructor (void *instance)
 {
-	return;
 }
 
 #ifdef COMPILE_OUT
Index: lib/evs.c
===================================================================
--- lib/evs.c	(revision 1410)
+++ lib/evs.c	(revision 1413)
@@ -80,6 +80,10 @@
  */
 static void evs_instance_destructor (void *instance)
 {
+	struct evs_inst *evs_inst = instance;
+
+	pthread_mutex_destroy (&evs_inst->response_mutex);
+	pthread_mutex_destroy (&evs_inst->dispatch_mutex);
 }
 
 

revision-1414.patch:

--- NEW FILE revision-1414.patch ---
Index: exec/evt.c
===================================================================
--- exec/evt.c	(revision 1413)
+++ exec/evt.c	(revision 1414)
@@ -1987,6 +1987,7 @@
 		if (!ep) {
 			log_printf(LOG_LEVEL_WARNING,
 						"5Memory allocation error, can't deliver event\n");
+			free (ed);
 			return;
 		}
 		ep->cel_chan_handle = eco->eco_lib_handle;

revision-1415.patch:

--- NEW FILE revision-1415.patch ---
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c	(revision 1414)
+++ exec/totemsrp.c	(revision 1415)
@@ -2272,13 +2272,13 @@
 		 * Delete item from pending queue
 		 */
 		queue_item_remove (mcast_queue);
+
+		/*
+		 * If messages mcasted, deliver any new messages to totempg
+		 */
+		instance->my_high_seq_received = token->seq;
 	}
 
-	/*
-	 * If messages mcasted, deliver any new messages to totempg
-	 */
-	instance->my_high_seq_received = token->seq;
-		
 	update_aru (instance);
 
 	/*

revision-1416.patch:

--- NEW FILE revision-1416.patch ---
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c	(revision 1415)
+++ exec/totemsrp.c	(revision 1416)
@@ -3385,9 +3385,10 @@
 	struct sort_queue_item *sort_queue_item_p;
 	unsigned int i;
 	int res;
-	struct mcast *mcast;
+	struct mcast *mcast_in;
+	struct mcast mcast_header;
 	unsigned int range = 0;
-	int endian_conversion_required = 0 ;
+	int endian_conversion_required;
 	unsigned int my_high_delivered_stored = 0;
 
 
@@ -3435,19 +3436,28 @@
 
 		sort_queue_item_p = ptr;
 
-		mcast = sort_queue_item_p->iovec[0].iov_base;
-		assert (mcast != (struct mcast *)0xdeadbeef);
+		mcast_in = sort_queue_item_p->iovec[0].iov_base;
+		assert (mcast_in != (struct mcast *)0xdeadbeef);
 
+		endian_conversion_required = 0;
+		if (mcast_in->header.endian_detector != ENDIAN_LOCAL) {
+			endian_conversion_required = 1;
+			mcast_endian_convert (mcast_in, &mcast_header);
+		} else {
+			memcpy (&mcast_header, mcast_in, sizeof (struct mcast));
+		}
+
 		/*
 		 * Skip messages not originated in instance->my_deliver_memb
 		 */
 		if (skip &&
-			memb_set_subset (&mcast->system_from,
+			memb_set_subset (&mcast_header.system_from,
 				1,
 				instance->my_deliver_memb_list,
 				instance->my_deliver_memb_entries) == 0) {
-		instance->my_high_delivered = my_high_delivered_stored + i;
 
+			instance->my_high_delivered = my_high_delivered_stored + i;
+
 			continue;
 		}
 
@@ -3456,20 +3466,15 @@
 		 */
 		log_printf (instance->totemsrp_log_level_debug,
 			"Delivering MCAST message with seq %x to pending delivery queue\n",
-			mcast->seq);
+			mcast_header.seq);
 
-		if (mcast->header.endian_detector != ENDIAN_LOCAL) {
-			endian_conversion_required = 1;
-			mcast_endian_convert (mcast, mcast);
-		}
-
 		/*
 		 * Message is locally originated multicast
 		 */
 	 	if (sort_queue_item_p->iov_len > 1 &&
 			sort_queue_item_p->iovec[0].iov_len == sizeof (struct mcast)) {
 			instance->totemsrp_deliver_fn (
-				mcast->header.nodeid,
+				mcast_header.header.nodeid,
 				&sort_queue_item_p->iovec[1],
 				sort_queue_item_p->iov_len - 1,
 				endian_conversion_required);
@@ -3478,7 +3483,7 @@
 			sort_queue_item_p->iovec[0].iov_base += sizeof (struct mcast);
 
 			instance->totemsrp_deliver_fn (
-				mcast->header.nodeid,
+				mcast_header.header.nodeid,
 				sort_queue_item_p->iovec,
 				sort_queue_item_p->iov_len,
 				endian_conversion_required);

revision-1419.patch:

--- NEW FILE revision-1419.patch ---
Index: Makefile
===================================================================
--- Makefile	(revision 1416)
+++ Makefile	(revision 1419)
@@ -196,4 +196,4 @@
 	install -m 644 man/*.8 $(DESTDIR)$(MANDIR)/man8
 
 doxygen:
-	doxygen
+	mkdir -p doc/api && doxygen

revision-1423.patch:

--- NEW FILE revision-1423.patch ---
Index: exec/ckpt.c
===================================================================
--- exec/ckpt.c	(revision 1422)
+++ exec/ckpt.c	(revision 1423)
@@ -825,14 +825,7 @@
 	}
 	
 	my_lowest_nodeid = 0xffffffff;
-	for (i = 0; i < my_member_list_entries; i++) {
-		if ((my_member_list[i] != 0) &&
-			(my_member_list[i] < my_lowest_nodeid)) {
 
-			my_lowest_nodeid = my_member_list[i];
-		}
-	}
-
 	/*
 	 * Handle regular configuration
 	 */
@@ -842,6 +835,13 @@
 		my_member_list_entries = member_list_entries;
 		memcpy (&my_saved_ring_id, ring_id,
 			sizeof (struct memb_ring_id));
+		for (i = 0; i < my_member_list_entries; i++) {
+			if ((my_member_list[i] != 0) &&
+				(my_member_list[i] < my_lowest_nodeid)) {
+
+				my_lowest_nodeid = my_member_list[i];
+			}
+		}
 	}
 }
 
Index: exec/sync.c
===================================================================
--- exec/sync.c	(revision 1422)
+++ exec/sync.c	(revision 1423)
@@ -452,6 +452,9 @@
 {
 	sync_ring_id = ring_id;
 
+	if (configuration_type != TOTEM_CONFIGURATION_REGULAR) {
+		return;
+	}
 	if (sync_processing && sync_callbacks.sync_abort != NULL) {
 		sync_callbacks.sync_abort ();
 	}

revision-1426.patch:

--- NEW FILE revision-1426.patch ---
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c	(revision 1423)
+++ exec/totemsrp.c	(revision 1426)
@@ -138,6 +138,11 @@
 	MESSAGE_TYPE_TOKEN_HOLD_CANCEL = 5,	/* cancel the holding of the token */
 };
 
+enum encapsulation_type {
+	MESSAGE_ENCAPSULATED = 1,
+	MESSAGE_NOT_ENCAPSULATED = 2
+};
+
 /* 
  * New membership algorithm local variables
  */
@@ -673,7 +678,10 @@
 {
 	struct totemsrp_instance *instance;
 	unsigned int res;
+struct orf_token suck;
 
+printf ("%p %p size is %d %d\n", &suck, &suck.rtr_list[0], sizeof (struct orf_token), (sizeof (struct rtr_item) * RETRANSMIT_ENTRIES_MAX));
+exit (1);
 	res = hdb_handle_create (&totemsrp_instance_database,
 		sizeof (struct totemsrp_instance), handle);
 	if (res != 0) {
@@ -1891,8 +1899,9 @@
 		sizeof (struct mcast));
 	memcpy (&message_item.mcast->ring_id, &instance->my_ring_id,
 		sizeof (struct memb_ring_id));
-	message_item.mcast->header.encapsulated = 1;
+	message_item.mcast->header.encapsulated = MESSAGE_ENCAPSULATED;
 	message_item.mcast->header.nodeid = instance->my_id.addr[0].nodeid;
+	message_item.mcast->header.endian_detector = ENDIAN_LOCAL;
 	assert (message_item.mcast->header.nodeid);
 	message_item.iov_len = sort_queue_item->iov_len;
 	memcpy (&message_item.iovec, &sort_queue_item->iovec,
@@ -1987,7 +1996,7 @@
 	 */
 	message_item.mcast->header.type = MESSAGE_TYPE_MCAST;
 	message_item.mcast->header.endian_detector = ENDIAN_LOCAL;
-	message_item.mcast->header.encapsulated = 2;
+	message_item.mcast->header.encapsulated = MESSAGE_NOT_ENCAPSULATED;
 	message_item.mcast->header.nodeid = instance->my_id.addr[0].nodeid;
 	assert (message_item.mcast->header.nodeid);
 
@@ -2558,14 +2567,14 @@
 	orf_token.token_seq = SEQNO_START_TOKEN;
 	orf_token.retrans_flg = 1;
 	instance->my_set_retrans_flg = 1;
-/*
+
 	if (queue_is_empty (&instance->retrans_message_queue) == 1) {
 		orf_token.retrans_flg = 0;
+		instance->my_set_retrans_flg = 0;
 	} else {
 		orf_token.retrans_flg = 1;
 		instance->my_set_retrans_flg = 1;
 	}
-*/
 		
 	orf_token.aru = 0;
 	orf_token.aru = SEQNO_START_MSG - 1;
@@ -2601,6 +2610,9 @@
 	 *  TODO high delivered is really instance->my_aru, but with safe this
 	 * could change?
 	 */
+	instance->my_received_flg =
+		(instance->my_aru == instance->my_high_seq_received);
+
 	memb_list[commit_token->memb_index].high_delivered = instance->my_high_delivered;
 	memb_list[commit_token->memb_index].received_flg = instance->my_received_flg;
 
@@ -3084,7 +3096,6 @@
 	unsigned int mcasted_retransmit;
 	unsigned int mcasted_regular;
 	unsigned int last_aru;
-	unsigned int low_water;
 
 #ifdef GIVEINFO
 	struct timeval tv_current;
@@ -3278,13 +3289,7 @@
 				 * has recovered all messages it can recover
 				 * (ie: its retrans queue is empty)
 				 */
-				low_water = instance->my_aru;
-				if (sq_lt_compare (last_aru, low_water)) {
-					low_water = last_aru;
-				}
-// TODO is this code right
-				if (queue_is_empty (&instance->retrans_message_queue) == 0 ||
-					low_water != instance->my_high_seq_received) {
+				if (queue_is_empty (&instance->retrans_message_queue) == 0) {
 
 					if (token->retrans_flg == 0) {
 						token->retrans_flg = 1;
@@ -3295,10 +3300,10 @@
 					token->retrans_flg = 0;
 				}
 				log_printf (instance->totemsrp_log_level_debug,
-					"token retrans flag is %d my set retrans flag%d retrans queue empty %d count %d, low_water %x aru %x\n", 
+					"token retrans flag is %d my set retrans flag%d retrans queue empty %d count %d, aru %x\n", 
 					token->retrans_flg, instance->my_set_retrans_flg,
 					queue_is_empty (&instance->retrans_message_queue),
-					instance->my_retrans_flg_count, low_water, token->aru);
+					instance->my_retrans_flg_count, token->aru);
 				if (token->retrans_flg == 0) { 
 					instance->my_retrans_flg_count += 1;
 				} else {
@@ -3310,13 +3315,16 @@
 				log_printf (instance->totemsrp_log_level_debug,
 					"install seq %x aru %x high seq received %x\n",
 					instance->my_install_seq, instance->my_aru, instance->my_high_seq_received);
-				if (instance->my_retrans_flg_count >= 2 && instance->my_aru >= instance->my_install_seq && instance->my_received_flg == 0) {
+				if (instance->my_retrans_flg_count >= 2 &&
+					instance->my_received_flg == 0 &&
+					sq_lte_compare (instance->my_install_seq, instance->my_aru)) {
 					instance->my_received_flg = 1;
 					instance->my_deliver_memb_entries = instance->my_trans_memb_entries;
 					memcpy (instance->my_deliver_memb_list, instance->my_trans_memb_list,
 						sizeof (struct totem_ip_address) * instance->my_trans_memb_entries);
 				}
-				if (instance->my_retrans_flg_count >= 3 && token->aru >= instance->my_install_seq) {
+				if (instance->my_retrans_flg_count >= 3 &&
+					sq_lte_compare (instance->my_install_seq, token->aru)) {
 					instance->my_rotation_counter += 1;
 				} else {
 					instance->my_rotation_counter = 0;
@@ -3515,18 +3523,12 @@
 		memcpy (&mcast_header, msg, sizeof (struct mcast));
 	}
 
-/*
-	if (mcast_header.header.encapsulated == 1) {
+	if (mcast_header.header.encapsulated == MESSAGE_ENCAPSULATED) {
 		sort_queue = &instance->recovery_sort_queue;
 	} else {
 		sort_queue = &instance->regular_sort_queue;
 	}
-*/
-	if (instance->memb_state == MEMB_STATE_RECOVERY) {
-		sort_queue = &instance->recovery_sort_queue;
-	} else {
-		sort_queue = &instance->regular_sort_queue;
-	}
+
 	assert (msg_len < FRAME_SIZE_MAX);
 
 #ifdef TEST_DROP_MCAST_PERCENTAGE
@@ -3853,6 +3855,8 @@
 	out->header.type = in->header.type;
 	out->header.endian_detector = ENDIAN_LOCAL;
 	out->header.nodeid = swab32 (in->header.nodeid);
+	out->header.encapsulated = in->header.encapsulated;
+
 	out->seq = swab32 (in->seq);
 	out->this_seqno = swab32 (in->this_seqno);
 	totemip_copy_endian_convert(&out->ring_id.rep, &in->ring_id.rep);
@@ -4051,7 +4055,12 @@
 		log_printf (instance->totemsrp_log_level_security, "Received message is too short...  ignoring %d.\n", msg_len);
 		return;
 	}
-
+	
+	if ((int)message_header->type >= totemsrp_message_handlers.count) {
+		log_printf (instance->totemsrp_log_level_security, "Type of received message is wrong...  ignoring %d.\n", (int)message_header->type);
+		return;
+	}
+	
 	/*
 	 * Handle incoming message
 	 */

revision-1446.patch:

--- NEW FILE revision-1446.patch ---
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c	(revision 1426)
+++ exec/totemsrp.c	(revision 1446)
@@ -678,10 +678,7 @@
 {
 	struct totemsrp_instance *instance;
 	unsigned int res;
-struct orf_token suck;
 
-printf ("%p %p size is %d %d\n", &suck, &suck.rtr_list[0], sizeof (struct orf_token), (sizeof (struct rtr_item) * RETRANSMIT_ENTRIES_MAX));
-exit (1);
 	res = hdb_handle_create (&totemsrp_instance_database,
 		sizeof (struct totemsrp_instance), handle);
 	if (res != 0) {

revision-1449.patch:

--- NEW FILE revision-1449.patch ---
Index: exec/service.c
===================================================================
--- exec/service.c	(revision 1446)
+++ exec/service.c	(revision 1449)
@@ -87,7 +87,7 @@
 	}
 };
 
-struct openais_service_handler *ais_service[128];
+struct openais_service_handler *ais_service[SERVICE_HANDLER_MAXIMUM_COUNT];
 
 /*
  * Adds a service handler to the object database
Index: exec/service.h
===================================================================
--- exec/service.h	(revision 1446)
+++ exec/service.h	(revision 1449)
@@ -44,6 +44,7 @@
 #endif
 
 #define SERVICE_ID_MAKE(a,b) ( ((a)<<16) | (b) )
+#define SERVICE_HANDLER_MAXIMUM_COUNT 64
 
 enum openais_flow_control {
 	OPENAIS_FLOW_CONTROL_REQUIRED = 1,
Index: exec/sync.c
===================================================================
--- exec/sync.c	(revision 1446)
+++ exec/sync.c	(revision 1449)
@@ -198,9 +198,10 @@
 {
 	int res;
 
-// TODO rewrite this to get rid of the for (;;)
 	for (;;) {
-		res = sync_callbacks_retrieve (sync_recovery_index, &sync_callbacks);
+		res = sync_callbacks_retrieve (sync_recovery_index,
+			&sync_callbacks);
+
 		/*
 		 * No more service handlers have sync callbacks at this time
 	`	 */
@@ -418,7 +419,6 @@
 		log_printf (LOG_LEVEL_DEBUG,
 			"Committing synchronization for (%s)\n",
 			sync_callbacks.name);
-	
 	}
 
 	/*
Index: exec/main.c
===================================================================
--- exec/main.c	(revision 1446)
+++ exec/main.c	(revision 1449)
@@ -175,15 +175,29 @@
 static int openais_sync_callbacks_retrieve (int sync_id,
 	struct sync_callbacks *callbacks)
 {
-	if (ais_service[sync_id] == NULL) {
+	unsigned int ais_service_index;
+	unsigned int ais_services_found = 0;
+	
+	for (ais_service_index = 0;
+		ais_service_index < SERVICE_HANDLER_MAXIMUM_COUNT;
+		ais_service_index++) {
+
+		if (ais_service[ais_service_index] != NULL) {
+			if (ais_services_found == sync_id) {
+				break;
+			}
+			ais_services_found += 1;
+		}
+	}
+	if (ais_service_index == SERVICE_HANDLER_MAXIMUM_COUNT) {
 		memset (callbacks, 0, sizeof (struct sync_callbacks));
 		return (-1);
 	}
-	callbacks->name = ais_service[sync_id]->name;
-	callbacks->sync_init = ais_service[sync_id]->sync_init;
-	callbacks->sync_process = ais_service[sync_id]->sync_process;
-	callbacks->sync_activate = ais_service[sync_id]->sync_activate;
-	callbacks->sync_abort = ais_service[sync_id]->sync_abort;
+	callbacks->name = ais_service[ais_service_index]->name;
+	callbacks->sync_init = ais_service[ais_service_index]->sync_init;
+	callbacks->sync_process = ais_service[ais_service_index]->sync_process;
+	callbacks->sync_activate = ais_service[ais_service_index]->sync_activate;
+	callbacks->sync_abort = ais_service[ais_service_index]->sync_abort;
 	return (0);
 }
 

revision-1450.patch:

--- NEW FILE revision-1450.patch ---
Index: lcr/test.c
===================================================================
--- lcr/test.c	(revision 1449)
+++ lcr/test.c	(revision 1450)
@@ -87,7 +87,7 @@
 		(void *)0xaaaa1111);
 	assert (res == 0);
 
-	a_iface_ver1 = (struct iface *)a_iface_ver0_p;
+	a_iface_ver1 = (struct iface *)a_iface_ver1_p;
 
 	res = lcr_ifact_reference (
 		&b_ifact_handle_ver1,
@@ -97,7 +97,7 @@
 		(void *)0xbbbb1111);
 	assert (res == 0);
 
-	b_iface_ver1 = (struct iface *)b_iface_ver0_p;
+	b_iface_ver1 = (struct iface *)b_iface_ver1_p;
 
 	a_iface_ver0->func1();
 	a_iface_ver0->func2();
Index: lcr/lcr_ifact.c
===================================================================
--- lcr/lcr_ifact.c	(revision 1449)
+++ lcr/lcr_ifact.c	(revision 1450)
@@ -45,6 +45,7 @@
 struct lcr_component_instance {
 	struct lcr_iface *ifaces;
 	int iface_count;
+	unsigned int comp_handle;
 	void *dl_handle;
 	int refcount;
 	char library_name[256];
@@ -68,7 +69,7 @@
 	.iterator	= 0
 };
 
-static unsigned int g_component_handle;
+static unsigned int g_component_handle = 0xFFFFFFFF;
 
 #ifdef OPENAIS_LINUX
 static int lcr_select_so (const struct dirent *dirent)
@@ -170,7 +171,6 @@
 
 	res = getcwd (cwd, sizeof (cwd));
 	if (res != NULL) {
-		strcat (cwd, "/");
 		path_list[0] = strdup (cwd);
 		path_list_entries++;
 	}
@@ -291,6 +291,8 @@
 		}
 		dl_handle = dlopen (dl_name, RTLD_LAZY);
 		if (dl_handle == NULL) {
+			fprintf (stderr, "LCR error loading plugin: %s\n",
+				dlerror());
 			continue;
 		}
 		instance = lcr_comp_find (iface_name, version, iface_number);
@@ -301,8 +303,8 @@
 		}
 
 		/*
-		 * No matching interfaces found, try next shared object
-		 */
+		* No matching interfaces found, try next shared object
+		*/
 		if (g_component_handle != 0xFFFFFFFF) {
 			hdb_handle_destroy (&lcr_component_instance_database,
 				g_component_handle);
@@ -349,20 +351,20 @@
 
 // TODO error checking in this code is weak
 	/*
-	 * Find all *.lcrso files in search paths
+	 * Search through all lcrso files for desired interface
 	 */
 	for (i = 0; i < path_list_entries; i++) {
-	res = interface_find_and_load (
-		path_list[i],
-		iface_name,
-		version,
-		&instance,
-		&iface_number);
+		res = interface_find_and_load (
+			path_list[i],
+			iface_name,
+			version,
+			&instance,
+			&iface_number);
 
-	if (res == 0) {
-		goto found;
+		if (res == 0) {
+			goto found;
+		}
 	}
-	}
 
 	/*
 	 * No matching interfaces found in all shared objects
@@ -379,9 +381,10 @@
 		iface_handle);
 	hdb_handle_get (&lcr_iface_instance_database,
 		*iface_handle, (void *)&iface_instance);
-	iface_instance->component_handle = g_component_handle;
+	iface_instance->component_handle = instance->comp_handle;
 	iface_instance->context = context;
 	iface_instance->destructor = instance->ifaces[iface_number].destructor;
+	hdb_handle_put (&lcr_iface_instance_database, *iface_handle);
 	return (0);
 }
 
@@ -408,17 +411,21 @@
 void lcr_component_register (struct lcr_comp *comp)
 {
 	struct lcr_component_instance *instance;
+	static unsigned int comp_handle;
 
 	hdb_handle_create (&lcr_component_instance_database,
 		sizeof (struct lcr_component_instance),
-		&g_component_handle);
+		&comp_handle);
 	hdb_handle_get (&lcr_component_instance_database,
-		g_component_handle, (void *)&instance);
+		comp_handle, (void *)&instance);
 
 	instance->ifaces = comp->ifaces;
 	instance->iface_count = comp->iface_count;
+	instance->comp_handle = comp_handle;
 	instance->dl_handle = NULL;
 
 	hdb_handle_put (&lcr_component_instance_database,
-		g_component_handle);
+		comp_handle);
+
+	g_component_handle = comp_handle;
 }
Index: lcr/Makefile
===================================================================
--- lcr/Makefile	(revision 1449)
+++ lcr/Makefile	(revision 1450)
@@ -27,7 +27,7 @@
 include ../Makefile.inc
 
 CFLAGS += -I../include
-LDFLAGS += -L./ ${DYFLAGS}
+override LDFLAGS += ${DYFLAGS}
 
 ifeq (${OPENAIS_COMPAT}, LINUX) 
 	LDFLAGS += -ldl
@@ -57,7 +57,7 @@
 endif
 	
 test: test.o uis.o lcr_ifact.o
-	$(CC) $(LDFLAGS) test.o lcr_ifact.o uis.o -lpthread -o test
+	$(CC) $(LDFLAGS) -fPIC test.o lcr_ifact.o uis.o -lpthread -o test
 
 test_static: test.o libtest_a.o libtest_b.o uis.o lcr_ifact.o
 	$(CC) $(LDFLAGS) test.o libtest_a.o libtest_b.o lcr_ifact.o -o test_static
@@ -71,6 +71,12 @@
 libtest_b.o: libtest_b.c
 	$(CC) $(CFLAGS) $(CPPFLAGS) -fPIC -c -o $@ $(*F).c
 
+lcr_ifact.o: lcr_ifact.c
+	$(CC) $(CFLAGS) $(CPPFLAGS) -fPIC -c -o $@ $(*F).c
+
+test.o: test.c
+	$(CC) $(CFLAGS) $(CPPFLAGS) -fPIC -c -o $@ $(*F).c
+
 clean:
 	rm -f test libtest.so* *.o uic liblcr.so* liblcr.a *.lcrso *.da *.ba *.bb *.bbg \
 	test_static

revision-1453.patch:

--- NEW FILE revision-1453.patch ---
Index: exec/amfcomp.c
===================================================================
--- exec/amfcomp.c	(revision 1450)
+++ exec/amfcomp.c	(revision 1453)
@@ -1129,11 +1129,14 @@
 
 	if (comp->saAmfCompPresenceState == SA_AMF_PRESENCE_RESTARTING) {
 		comp_presence_state_set (comp, SA_AMF_PRESENCE_INSTANTIATED);
-	} else if (comp->saAmfCompPresenceState == SA_AMF_PRESENCE_INSTANTIATING) {
+	} else
+	if (comp->saAmfCompPresenceState == SA_AMF_PRESENCE_INSTANTIATING) {
 		amf_comp_operational_state_set (comp, SA_AMF_OPERATIONAL_ENABLED);
 		comp_presence_state_set (comp, SA_AMF_PRESENCE_INSTANTIATED);
-	}
-	else {
+	} else 
+	if (comp->saAmfCompPresenceState == SA_AMF_PRESENCE_UNINSTANTIATED) {
+		return SA_AIS_ERR_INVALID_PARAM;
+     	} else {
 		assert (0);
 	}
 

revision-1455.patch:

--- NEW FILE revision-1455.patch ---
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c	(revision 1453)
+++ exec/totemsrp.c	(revision 1455)
@@ -1779,15 +1779,10 @@
 	/*
 	 * Build regular configuration
 	 */
-	instance->my_new_memb_entries = commit_token->addr_entries;
-
  	totemrrp_processor_count_set (
 		instance->totemrrp_handle,
 		commit_token->addr_entries);
 
-	memcpy (instance->my_new_memb_list, addr,
-		sizeof (struct srp_addr) * instance->my_new_memb_entries);
-
 	/*
 	 * Build transitional configuration
 	 */
@@ -2598,6 +2593,11 @@
 	addr = (struct srp_addr *)commit_token->end_of_commit_token;
 	memb_list = (struct memb_commit_token_memb_entry *)(addr + commit_token->addr_entries);
 
+	memcpy (instance->my_new_memb_list, addr,
+		sizeof (struct srp_addr) * commit_token->addr_entries);
+
+	instance->my_new_memb_entries = commit_token->addr_entries;
+
 	memcpy (&memb_list[commit_token->memb_index].ring_id,
 		&instance->my_old_ring_id, sizeof (struct memb_ring_id));
 	assert (!totemip_zero_check(&instance->my_old_ring_id.rep));

revision-1464.patch:

--- NEW FILE revision-1464.patch ---
Index: exec/timer.c
===================================================================
--- exec/timer.c	(revision 1455)
+++ exec/timer.c	(revision 1464)
@@ -177,7 +177,7 @@
 	int res;
 	int unlock;
 
-	if (pthread_equal (pthread_self(), expiry_thread) == 0) {
+	if (pthread_equal (pthread_self(), expiry_thread) != 0) {
 		unlock = 0;
 	} else {
 		unlock = 1;
@@ -209,7 +209,7 @@
 	int res;
 	int unlock;
 
-	if (pthread_equal (pthread_self(), expiry_thread) == 0) {
+	if (pthread_equal (pthread_self(), expiry_thread) != 0) {
 		unlock = 0;
 	} else {
 		unlock = 1;

revision-1465.patch:

--- NEW FILE revision-1465.patch ---
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c	(revision 1464)
+++ exec/totemsrp.c	(revision 1465)
@@ -2838,7 +2838,6 @@
 		}
 		res = write (fd, &memb_ring_id->seq, sizeof (unsigned long long));
 		assert (res == sizeof (unsigned long long));
-		fsync (fd);
 		close (fd);
 	} else {
 		log_printf (instance->totemsrp_log_level_warning,
@@ -2879,7 +2878,6 @@
 	//assert (fd > 0);
 	res = write (fd, &instance->my_ring_id.seq, sizeof (unsigned long long));
 	assert (res == sizeof (unsigned long long));
-	fsync (fd);
 	close (fd);
 }
 

revision-1469.patch:

--- NEW FILE revision-1469.patch ---
Index: include/saCkpt.h
===================================================================
--- include/saCkpt.h	(revision 1465)
+++ include/saCkpt.h	(revision 1469)
@@ -199,7 +199,7 @@
 	SaCkptCheckpointHandleT checkpointHandle,
 	SaCkptSectionCreationAttributesT *sectionCreationAttributes,
 	const void *initialData,
-	SaUint32T initialDataSize);
+	SaSizeT initialDataSize);
 
 
 SaAisErrorT
Index: lib/ckpt.c
===================================================================
--- lib/ckpt.c	(revision 1465)
+++ lib/ckpt.c	(revision 1469)
@@ -1036,7 +1036,7 @@
 	SaCkptCheckpointHandleT checkpointHandle,
 	SaCkptSectionCreationAttributesT *sectionCreationAttributes,
 	const void *initialData,
-	SaUint32T initialDataSize)
+	SaSizeT initialDataSize)
 {
 	SaAisErrorT error;
 	struct ckptCheckpointInstance *ckptCheckpointInstance;

revision-1471.patch:

--- NEW FILE revision-1471.patch ---
Index: exec/cpg.c
===================================================================
--- exec/cpg.c	(revision 1469)
+++ exec/cpg.c	(revision 1471)
@@ -688,10 +688,16 @@
 static void exec_cpg_downlist_endian_convert (void *msg)
 {
 	struct req_exec_cpg_downlist *req_exec_cpg_downlist = (struct req_exec_cpg_downlist *)msg;
+	unsigned int i;
 
 	req_exec_cpg_downlist->left_nodes = swab32(req_exec_cpg_downlist->left_nodes);
+ 
+	for (i = 0; i < req_exec_cpg_downlist->left_nodes; i++) {
+		req_exec_cpg_downlist->nodeids[i] = swab32(req_exec_cpg_downlist->nodeids[i]);
+	}
 }
 
+
 static void exec_cpg_mcast_endian_convert (void *msg)
 {
 	struct req_exec_cpg_mcast *req_exec_cpg_mcast = (struct req_exec_cpg_mcast *)msg;

revision-1473.patch:

--- NEW FILE revision-1473.patch ---
Index: exec/timer.c
===================================================================
--- exec/timer.c	(revision 1471)
+++ exec/timer.c	(revision 1473)
@@ -241,7 +241,7 @@
 		return;
 	}
 
-	if (pthread_equal (pthread_self(), expiry_thread) == 0) {
+	if (pthread_equal (pthread_self(), expiry_thread) != 0) {
 		unlock = 0;
 	} else {
 		unlock = 1;

revision-1477.patch:

--- NEW FILE revision-1477.patch ---
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c	(revision 1473)
+++ exec/totemsrp.c	(revision 1477)
@@ -495,6 +495,8 @@
 	unsigned int my_pbl;
 
 	unsigned int my_cbl;
+
+	unsigned int operational_entered_once;
 };
 
 struct message_handlers {
@@ -1643,6 +1645,8 @@
 
 	instance->my_received_flg = 0;
 
+	instance->operational_entered_once = 1;
+
 	return;
 }
 
@@ -2728,7 +2732,17 @@
 
 	totemip_copy(&commit_token->ring_id.rep, &instance->my_id.addr[0]);
 
-	commit_token->ring_id.seq = instance->token_ring_id_seq + 4;
+	/*
+	 * The first time operational is entered, don't increment the ring
+	 * sequence number (just reload it from stable storage).  This prevents
+	 * an error condition where if the executive is stopped and started
+	 * before a new ring is formed, the protocol will get stuck in recovery.
+	 */
+	if (instance->operational_entered_once) {
+		commit_token->ring_id.seq = instance->token_ring_id_seq + 4;
+	} else {
+		commit_token->ring_id.seq = instance->token_ring_id_seq;
+	}
 
 	/*
 	 * This qsort is necessary to ensure the commit token traverses

revision-1478.patch:

--- NEW FILE revision-1478.patch ---
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c	(revision 1477)
+++ exec/totemsrp.c	(revision 1478)
@@ -1891,14 +1891,14 @@
 // TODO	 LEAK
 	message_item.mcast = malloc (sizeof (struct mcast));
 	assert (message_item.mcast);
-	memcpy (message_item.mcast, sort_queue_item->iovec[0].iov_base,
-		sizeof (struct mcast));
-	memcpy (&message_item.mcast->ring_id, &instance->my_ring_id,
-		sizeof (struct memb_ring_id));
+	message_item.mcast->header.type = MESSAGE_TYPE_MCAST;
+	srp_addr_copy (&message_item.mcast->system_from, &instance->my_id);
 	message_item.mcast->header.encapsulated = MESSAGE_ENCAPSULATED;
 	message_item.mcast->header.nodeid = instance->my_id.addr[0].nodeid;
+	assert (message_item.mcast->header.nodeid);
 	message_item.mcast->header.endian_detector = ENDIAN_LOCAL;
-	assert (message_item.mcast->header.nodeid);
+	memcpy (&message_item.mcast->ring_id, &instance->my_ring_id,
+		sizeof (struct memb_ring_id));
 	message_item.iov_len = sort_queue_item->iov_len;
 	memcpy (&message_item.iovec, &sort_queue_item->iovec,
 		sizeof (struct iovec) * sort_queue_item->iov_len);

revision-1479.patch:

--- NEW FILE revision-1479.patch ---
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c	(revision 1478)
+++ exec/totemsrp.c	(revision 1479)
@@ -2790,7 +2790,7 @@
 		iovs = 2;
 	} else {
 		iovs = 3;
-		iovec[2].iov_base = &instance->my_failed_list;
+		iovec[2].iov_base = instance->my_failed_list;
 		iovec[2].iov_len = instance->my_failed_list_entries *
 			sizeof (struct srp_addr);
 	}

revision-1480.patch:

--- NEW FILE revision-1480.patch ---
Index: exec/totempg.c
===================================================================
--- exec/totempg.c	(revision 1479)
+++ exec/totempg.c	(revision 1480)
@@ -91,6 +91,7 @@
 #include <assert.h>
 #include <pthread.h>
 #include <errno.h>
+#include <unistd.h>
 
 #include "../include/hdb.h"
 #include "../include/list.h"
@@ -279,7 +280,7 @@
 	list_add (&assembly->list, &assembly_list_free);
 }
 
-static inline void app_confchg_fn (
+static void app_confchg_fn (
 	enum totem_configuration_type configuration_type,
 	unsigned int *member_list, int member_list_entries,
 	unsigned int *left_list, int left_list_entries,
@@ -312,7 +313,7 @@
 	}
 }
 
-static inline void group_endian_convert (
+static void group_endian_convert (
 	struct iovec *iovec)
 {
 	unsigned short *group_len;
@@ -323,10 +324,9 @@
 	for (i = 1; i < group_len[0] + 1; i++) {
 		group_len[i] = swab16(group_len[i]);
 	}
-
 }
 
-static inline int group_matches (
+static int group_matches (
 	struct iovec *iovec,
 	unsigned int iov_len,
 	struct totempg_group *groups_b,
@@ -346,7 +346,8 @@
 	 */
 	if ((size_t)iovec->iov_base % 4 != 0) {
 		iovec_aligned.iov_base = alloca(iovec->iov_len);
-		memcpy(iovec_aligned.iov_base, iovec->iov_base, iovec->iov_len);                iovec_aligned.iov_len = iovec->iov_len;
+		memcpy(iovec_aligned.iov_base, iovec->iov_base, iovec->iov_len);
+        iovec_aligned.iov_len = iovec->iov_len;
 		iovec = &iovec_aligned;
 	}
 
@@ -380,7 +381,7 @@
 }
 	
 
-static inline void app_deliver_fn (
+static void app_deliver_fn (
 	unsigned int nodeid,
 	struct iovec *iovec,
 	unsigned int iov_len,
@@ -393,17 +394,17 @@
 	unsigned int res;
         struct iovec aligned_iovec = { NULL, 0 };
 
-	if (endian_conversion_required) {
-		group_endian_convert (iovec);
-	}
-
 	/*
 	 * Align data structure for sparc and ia64
 	 */
 	aligned_iovec.iov_base = alloca(iovec->iov_len);
 	aligned_iovec.iov_len = iovec->iov_len;
+	assert (aligned_iovec.iov_base != NULL);
 	memcpy(aligned_iovec.iov_base, iovec->iov_base, iovec->iov_len);
 	iovec = &aligned_iovec;
+	if (endian_conversion_required) {
+		group_endian_convert (&aligned_iovec);
+	}
 
 	for (i = 0; i <= totempg_max_handle; i++) {
 		res = hdb_handle_get (&totempg_groups_instance_database,
@@ -411,9 +412,9 @@
 
 		if (res == 0) {
 			assert (iov_len == 1);
-			if (group_matches (iovec, iov_len, instance->groups, instance->groups_cnt, &adjust_iovec)) {
-				stripped_iovec.iov_len = iovec->iov_len - adjust_iovec;
-//				stripped_iovec.iov_base = (char *)iovec->iov_base + adjust_iovec;
+			if (group_matches (&aligned_iovec, iov_len, instance->groups, instance->groups_cnt, &adjust_iovec)) {
+				stripped_iovec.iov_len = aligned_iovec.iov_len - adjust_iovec;
+//				stripped_iovec.iov_base = (char *)aligned_iovec.iov_base + adjust_iovec;
 
 				/*
 				 * Align data structure for sparc and ia64
@@ -463,11 +464,11 @@
 	int endian_conversion_required)
 {
 	struct totempg_mcast *mcast;
-	unsigned short *msg_lens;
+	unsigned short *msg_lens_from_msg;
+	unsigned short msg_lens[1500];
+	unsigned short mcast_msg_count;
 	int i;
 	struct assembly *assembly;
-	char header[FRAME_SIZE_MAX];
-	int h_index;
 	int a_i = 0;
 	int msg_count;
 	int continuation;
@@ -476,8 +477,15 @@
 	assembly = assembly_ref (nodeid);
 	assert (assembly);
 
+	mcast = (struct totempg_mcast *)iovec[0].iov_base;
+	if (endian_conversion_required) {
+		mcast_msg_count = swab16 (mcast->msg_count);
+	} else {
+		mcast_msg_count = mcast->msg_count;
+	}
+	msg_count = mcast_msg_count;
+
 	/*
-	 * Assemble the header into one block of data and
 	 * assemble the packet contents into one block of data to simplify delivery
 	 */
 	if (iov_len == 1) {
@@ -488,44 +496,36 @@
 		char *data;
 		int datasize;
 
-		mcast = (struct totempg_mcast *)iovec[0].iov_base;
-		if (endian_conversion_required) {
-			mcast->msg_count = swab16 (mcast->msg_count);
+		msg_lens_from_msg = (unsigned short *) (iovec[0].iov_base +
+			sizeof (struct totempg_mcast));
+		for (i = 0; i < mcast_msg_count; i++) {
+			msg_lens[i] = swab16 (msg_lens_from_msg[i]);
 		}
 
-		msg_count = mcast->msg_count;
 		datasize = sizeof (struct totempg_mcast) +
-			msg_count * sizeof (unsigned short);
+			mcast_msg_count * sizeof (unsigned short);
 		
-		memcpy (header, iovec[0].iov_base, datasize);
 		assert(iovec);
 		data = iovec[0].iov_base;
 
-		msg_lens = (unsigned short *) (header + sizeof (struct totempg_mcast));
+		memcpy (&assembly->data[assembly->index], &data[datasize],
+			iovec[0].iov_len - datasize);
+	} else {
+		msg_lens_from_msg = (unsigned short *)iovec[1].iov_base;
 		if (endian_conversion_required) {
-			for (i = 0; i < mcast->msg_count; i++) {
-				msg_lens[i] = swab16 (msg_lens[i]);
+			for (i = 0; i < mcast_msg_count; i++) {
+				msg_lens[i] = swab16 (msg_lens_from_msg[i]);
 			}
+		} else {
+			for (i = 0; i < mcast_msg_count; i++) {
+				msg_lens[i] = msg_lens_from_msg[i];
+			}
 		}
 
-		memcpy (&assembly->data[assembly->index], &data[datasize],
-			iovec[0].iov_len - datasize);
-	} else {
 		/* 
 		 * The message originated from local processor  
-		 * becasue there is greater than one iovec for then full msg.
+		 * because there is greater than one iovec for the full msg.
 		 */
-		h_index = 0;
-		for (i = 0; i < 2; i++) {
-			memcpy (&header[h_index], iovec[i].iov_base, iovec[i].iov_len);
-			h_index += iovec[i].iov_len;
-		}
-
-		mcast = (struct totempg_mcast *)header;
-// TODO make sure we are using a copy of mcast not the actual data itself
-
-		msg_lens = (unsigned short *) (header + sizeof (struct totempg_mcast));
-
 		for (i = 2; i < iov_len; i++) {
 			a_i = assembly->index;
 			assert (iovec[i].iov_len + a_i <= MESSAGE_SIZE_MAX);
@@ -541,7 +541,7 @@
 	 * then adjust the assembly buffer so we can add the rest of the 
 	 * fragment when it arrives.
 	 */
-	msg_count = mcast->fragmented ? mcast->msg_count - 1 : mcast->msg_count;
+	msg_count = mcast->fragmented ? mcast_msg_count - 1 : mcast_msg_count;
 	continuation = mcast->continuation;
 	iov_delv.iov_base = &assembly->data[0];
 	iov_delv.iov_len = assembly->index + msg_lens[0];
@@ -567,7 +567,8 @@
 		}
 
 		if ((assembly->index == 0) ||
-							(!continuation && assembly->index)) {
+			(!continuation && assembly->index)) {
+
 			log_printf (totempg_log_level_error,
 				"Throwing away broken message: continuation %u, index %u\n",
 				continuation, assembly->index);
@@ -609,7 +610,7 @@
 		 * Message is fragmented, keep around assembly list
 		 */
 		assembly->last_frag_num = mcast->fragmented;
-		if (mcast->msg_count > 1) {
+		if (mcast_msg_count > 1) {
 			memmove (&assembly->data[0],
 				&assembly->data[assembly->index],
 				msg_lens[msg_count]);

revision-1486.patch:

--- NEW FILE revision-1486.patch ---
Index: lib/util.c
===================================================================
--- lib/util.c	(revision 1480)
+++ lib/util.c	(revision 1486)
@@ -552,6 +552,8 @@
 
 	instance = malloc (instanceSize);
 	if (instance == 0) {
+		free (newHandles);
+		pthread_mutex_unlock (&handleDatabase->mutex);
 		return (SA_AIS_ERR_NO_MEMORY);
 	}
 

revision-1493.patch:

--- NEW FILE revision-1493.patch ---
Index: exec/cfg.c
===================================================================
--- exec/cfg.c	(revision 1486)
+++ exec/cfg.c	(revision 1493)
@@ -298,7 +298,7 @@
 	res_lib_cfg_ringstatusget.header.error = SA_AIS_OK;
 
 	totempg_ifaces_get (
-		this_ip->nodeid,
+		totempg_my_nodeid_get(),
 		interfaces,
 		&status,
 		&iface_count);
Index: exec/evs.c
===================================================================
--- exec/evs.c	(revision 1486)
+++ exec/evs.c	(revision 1493)
@@ -454,7 +454,7 @@
 	res_lib_evs_membership_get.header.size = sizeof (struct res_lib_evs_membership_get);
 	res_lib_evs_membership_get.header.id = MESSAGE_RES_EVS_MEMBERSHIP_GET;
 	res_lib_evs_membership_get.header.error = EVS_OK;
-	res_lib_evs_membership_get.local_nodeid = this_ip->nodeid;
+	res_lib_evs_membership_get.local_nodeid = totempg_my_nodeid_get ();
 	memcpy (&res_lib_evs_membership_get.member_list,
 		&res_evs_confchg_callback.member_list,
 		sizeof (res_lib_evs_membership_get.member_list));
Index: exec/cpg.c
===================================================================
--- exec/cpg.c	(revision 1486)
+++ exec/cpg.c	(revision 1493)
@@ -481,7 +481,7 @@
 
 	if (gi) {
 		notify_info.pid = pi->pid;
-		notify_info.nodeid = this_ip->nodeid;
+		notify_info.nodeid = totempg_my_nodeid_get();
 		notify_info.reason = CONFCHG_CPG_REASON_PROCDOWN;
 		cpg_node_joinleave_send(gi, pi, MESSAGE_REQ_EXEC_CPG_PROCLEAVE, CONFCHG_CPG_REASON_PROCDOWN);
 		list_del(&pi->list);
@@ -627,8 +627,8 @@
 				lowest_nodeid = member_list[i];
 		}
 
-		log_printf(LOG_LEVEL_DEBUG, "confchg, low nodeid=%d, us = %d\n", lowest_nodeid, this_ip->nodeid);
-		if (lowest_nodeid == this_ip->nodeid) {
+		log_printf(LOG_LEVEL_DEBUG, "confchg, low nodeid=%d, us = %d\n", lowest_nodeid, totempg_my_nodeid_get());
+		if (lowest_nodeid == totempg_my_nodeid_get()) {
 
 			req_exec_cpg_downlist.header.id = SERVICE_ID_MAKE(CPG_SERVICE, MESSAGE_REQ_EXEC_CPG_DOWNLIST);
 			req_exec_cpg_downlist.header.size = sizeof(struct req_exec_cpg_downlist);
@@ -729,7 +729,7 @@
 		if (pi->pid == pid && pi->nodeid == nodeid) {
 
 			/* It could be a local join message */
-			if ((nodeid == this_ip->nodeid) &&
+			if ((nodeid == totempg_my_nodeid_get()) &&
 				(!pi->flags & PI_FLAG_MEMBER)) {
 				goto local_join;
 			} else {
@@ -864,7 +864,7 @@
 		nodeid);
 
 	/* Ignore our own messages */
-	if (nodeid == this_ip->nodeid) {
+	if (nodeid == totempg_my_nodeid_get()) {
 		return;
 	}
 
@@ -943,7 +943,7 @@
 			gi = list_entry(iter, struct group_info, list);
 			for (iter2 = gi->members.next; iter2 != &gi->members; iter2 = iter2->next) {
 				struct process_info *pi = list_entry(iter2, struct process_info, list);
-				if (pi->pid && pi->nodeid == this_ip->nodeid) {
+				if (pi->pid && pi->nodeid == totempg_my_nodeid_get()) {
 					count++;
 				}
 			}
@@ -970,7 +970,7 @@
 			for (iter2 = gi->members.next; iter2 != &gi->members; iter2 = iter2->next) {
 
 				struct process_info *pi = list_entry(iter2, struct process_info, list);
-				if (pi->pid && pi->nodeid == this_ip->nodeid) {
+				if (pi->pid && pi->nodeid == totempg_my_nodeid_get()) {
 					memcpy(&jle->group_name, &gi->group_name, sizeof(mar_cpg_name_t));
 					jle->pid = pi->pid;
 					jle++;
@@ -1029,7 +1029,7 @@
 		pi);
 
 	/* Add a node entry for us */
-	pi->nodeid = this_ip->nodeid;
+	pi->nodeid = totempg_my_nodeid_get();
 	pi->pid = req_lib_cpg_join->pid;
 	pi->group = gi;
 	list_add(&pi->list, &gi->members);
@@ -1213,7 +1213,7 @@
 	res_lib_cpg_local_get.header.size = sizeof(res_lib_cpg_local_get);
 	res_lib_cpg_local_get.header.id = MESSAGE_RES_CPG_LOCAL_GET;
 	res_lib_cpg_local_get.header.error = SA_AIS_OK;
-	res_lib_cpg_local_get.local_nodeid = this_ip->nodeid;
+	res_lib_cpg_local_get.local_nodeid = totempg_my_nodeid_get();
 
 	openais_conn_send_response(conn, &res_lib_cpg_local_get,
 		sizeof(res_lib_cpg_local_get));
Index: exec/clm.c
===================================================================
--- exec/clm.c	(revision 1486)
+++ exec/clm.c	(revision 1493)
@@ -262,24 +262,29 @@
 	mar_clm_cluster_node_t cluster_node __attribute__((aligned(8)));
 };
 
-static int clm_exec_init_fn (struct objdb_iface_ver0 *objdb)
+static void my_cluster_node_load (void)
 {
-	log_init ("CLM");
+	struct totem_ip_address interfaces[INTERFACE_MAX];
+	unsigned int iface_count;
+	char **status;
+	const char *iface_string;
 
-	memset (cluster_node_entries, 0,
-		sizeof (mar_clm_cluster_node_t) * PROCESSOR_COUNT_MAX);
+	totempg_ifaces_get (
+		totempg_my_nodeid_get (),
+		interfaces,
+		&status,
+		&iface_count);
 
-	/*
-	 * Build local cluster node data structure
-	 */
+	iface_string = totemip_print (&interfaces[0]);
+
 	sprintf ((char *)my_cluster_node.node_address.value, "%s",
-		totemip_print (this_ip));
+		iface_string);
 	my_cluster_node.node_address.length =
 		strlen ((char *)my_cluster_node.node_address.value);
-	if (this_ip->family == AF_INET) {
+	if (totempg_my_family_get () == AF_INET) {
 		my_cluster_node.node_address.family = SA_CLM_AF_INET;
 	} else
-	if (this_ip->family == AF_INET6) {
+	if (totempg_my_family_get () == AF_INET6) {
 		my_cluster_node.node_address.family = SA_CLM_AF_INET6;
 	} else {
 		assert (0);
@@ -289,8 +294,20 @@
 		(char *)my_cluster_node.node_address.value);
 	my_cluster_node.node_name.length =
 		my_cluster_node.node_address.length;
-	my_cluster_node.node_id = this_ip->nodeid;
+	my_cluster_node.node_id = totempg_my_nodeid_get ();
 	my_cluster_node.member = 1;
+
+	memcpy (&cluster_node_entries[0], &my_cluster_node,
+		sizeof (mar_clm_cluster_node_t));
+}
+
+static int clm_exec_init_fn (struct objdb_iface_ver0 *objdb)
+{
+	log_init ("CLM");
+
+	memset (cluster_node_entries, 0,
+		sizeof (mar_clm_cluster_node_t) * PROCESSOR_COUNT_MAX);
+
 	{
 #if defined(OPENAIS_LINUX)
 		struct sysinfo s_info;
@@ -313,7 +330,6 @@
 #endif
 	}
 
-	memcpy (&cluster_node_entries[0], &my_cluster_node, sizeof (mar_clm_cluster_node_t));
 	cluster_node_count = 1;
 
 	main_clm_get_by_nodeid = clm_get_by_nodeid;
@@ -519,20 +535,7 @@
 	 * Load the my_cluster_node data structure in case we are
 	 * transitioning to network interface up or down
 	 */
-	sprintf ((char *)my_cluster_node.node_address.value, "%s", totemip_print (this_ip));
-	my_cluster_node.node_address.length = strlen ((char *)my_cluster_node.node_address.value);
-	if (this_ip->family == AF_INET) {
-	my_cluster_node.node_address.family = SA_CLM_AF_INET;
-	} else
-	if (this_ip->family == AF_INET6) {
-	my_cluster_node.node_address.family = SA_CLM_AF_INET6;
-	} else {
-		assert (0);
-	}
-	strcpy ((char *)my_cluster_node.node_name.value,
-		(char *)my_cluster_node.node_address.value);
-	my_cluster_node.node_name.length = my_cluster_node.node_address.length;
-	my_cluster_node.node_id = this_ip->nodeid;
+	my_cluster_node_load ();
 }
 
 /*
Index: exec/ipc.c
===================================================================
--- exec/ipc.c	(revision 1486)
+++ exec/ipc.c	(revision 1493)
@@ -94,8 +94,6 @@
 
 static unsigned int g_gid_valid = 0;
 
-static struct totem_ip_address *my_ip;
-
 static totempg_groups_handle ipc_handle;
 
 DECLARE_LIST_INIT (conn_info_list_head);
@@ -962,7 +960,7 @@
 	int ret = 0;
 
 	assert (source != NULL);
-	if (source->nodeid == my_ip->nodeid) {
+	if (source->nodeid == totempg_my_nodeid_get ()) {
 		ret = 1;
 	}
 	return ret;
@@ -974,7 +972,7 @@
 {
 	assert ((source != NULL) && (conn != NULL));
 	memset (source, 0, sizeof (mar_message_source_t));
-	source->nodeid = my_ip->nodeid;
+	source->nodeid = totempg_my_nodeid_get ();
 	source->conn = conn;
 }
 
@@ -990,8 +988,7 @@
 void openais_ipc_init (
 	void (*serialize_lock_fn) (void),
 	void (*serialize_unlock_fn) (void),
-	unsigned int gid_valid,
-	struct totem_ip_address *my_ip_in)
+	unsigned int gid_valid)
 {
 	int libais_server_fd;
 	struct sockaddr_un un_addr;
@@ -1048,8 +1045,6 @@
 
 	g_gid_valid = gid_valid;
 
-	my_ip = my_ip_in;
-
 	/*
 	 * Reset internal state of flow control when
 	 * configuration change occurs
Index: exec/totempg.c
===================================================================
--- exec/totempg.c	(revision 1486)
+++ exec/totempg.c	(revision 1493)
@@ -1243,3 +1243,12 @@
 	return (iface_string);
 }
 
+int totempg_my_nodeid_get (void)
+{
+	return (totemmrp_my_nodeid_get());
+}
+
+int totempg_my_family_get (void)
+{
+	return (totemmrp_my_family_get());
+}
Index: exec/ipc.h
===================================================================
--- exec/ipc.h	(revision 1486)
+++ exec/ipc.h	(revision 1493)
@@ -51,8 +51,7 @@
 extern void openais_ipc_init (
         void (*serialize_lock_fn) (void),
         void (*serialize_unlock_fn) (void),
-	unsigned int gid_valid,
-	struct totem_ip_address *non_loopback_ip);
+	unsigned int gid_valid);
 
 extern int openais_ipc_timer_add (
 	void *conn,
Index: exec/totempg.h
===================================================================
--- exec/totempg.h	(revision 1486)
+++ exec/totempg.h	(revision 1493)
@@ -137,8 +137,12 @@
 	char ***status,
         unsigned int *iface_count);
 
+extern char *totempg_ifaces_print (unsigned int nodeid);
+
+extern int totempg_my_nodeid_get (void);
+
+extern int totempg_my_family_get (void);
+
 extern int totempg_ring_reenable (void);
 	
-extern char *totempg_ifaces_print (unsigned int nodeid);
-
 #endif /* TOTEMPG_H_DEFINED */
Index: exec/ckpt.c
===================================================================
--- exec/ckpt.c	(revision 1486)
+++ exec/ckpt.c	(revision 1493)
@@ -3572,7 +3572,7 @@
 
 	switch (my_sync_state) {
 	case SYNC_STATE_CHECKPOINT:
-		if (my_lowest_nodeid == this_ip->nodeid) {
+		if (my_lowest_nodeid == totempg_my_nodeid_get()) {
 			TRACE1 ("should transmit checkpoints because lowest member in old configuration.\n");
 			res = sync_checkpoints_iterate ();
 
@@ -3592,7 +3592,7 @@
 
 	case SYNC_STATE_REFCOUNT:
 		done_queueing = 1;
-		if (my_lowest_nodeid == this_ip->nodeid) {
+		if (my_lowest_nodeid == totempg_my_nodeid_get()) {
 			TRACE1 ("transmit refcounts because this processor is the lowest member in old configuration.\n");
 			res = sync_refcounts_iterate ();
 		}
Index: exec/vsf_ykd.c
===================================================================
--- exec/vsf_ykd.c	(revision 1486)
+++ exec/vsf_ykd.c	(revision 1493)
@@ -458,7 +458,7 @@
 	memcpy (&ykd_ring_id, ring_id, sizeof (struct memb_ring_id));
 
 	if (first_run) {
-		ykd_state.last_primary.member_list[0] = this_ip->nodeid;
+		ykd_state.last_primary.member_list[0] = totempg_my_nodeid_get();
 		ykd_state.last_primary.member_list_entries = 1;
 		ykd_state.last_primary.session_id = 0;
 		first_run = 0;
Index: exec/totemmrp.c
===================================================================
--- exec/totemmrp.c	(revision 1486)
+++ exec/totemmrp.c	(revision 1493)
@@ -191,6 +191,16 @@
 	return (res);
 }
 
+int totemmrp_my_nodeid_get (void)
+{
+	return (totemsrp_my_nodeid_get (totemsrp_handle_in));
+}
+
+int totemmrp_my_family_get (void)
+{
+	return (totemsrp_my_family_get (totemsrp_handle_in));
+}
+
 extern int totemmrp_ring_reenable (void)
 {
 	int res;
Index: exec/lck.c
===================================================================
--- exec/lck.c	(revision 1486)
+++ exec/lck.c	(revision 1493)
@@ -1185,7 +1185,7 @@
 				req_exec_lck_resourceunlock->invocation;
 
 			openais_conn_send_response (
-				req_exec_lck_resourceunlock->source.conn,
+				openais_conn_partner_get(req_exec_lck_resourceunlock->source.conn),
 				&res_lib_lck_resourceunlockasync,
 				sizeof (struct res_lib_lck_resourceunlockasync));
 			openais_conn_send_response (
Index: exec/totemmrp.h
===================================================================
--- exec/totemmrp.h	(revision 1486)
+++ exec/totemmrp.h	(revision 1493)
@@ -105,6 +105,10 @@
 	char ***status,
 	unsigned int *iface_count);
 
+extern int totemmrp_my_nodeid_get (void);
+
+extern int totemmrp_my_family_get (void);
+
 extern int totemmrp_ring_reenable (void);
 
 #endif /* TOTEMMRP_H_DEFINED */
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c	(revision 1486)
+++ exec/totemsrp.c	(revision 1493)
@@ -907,6 +907,43 @@
 	return (res);
 }
 
+int totemsrp_my_nodeid_get (
+	totemsrp_handle handle)
+{
+	struct totemsrp_instance *instance;
+	int res;
+
+	res = hdb_handle_get (&totemsrp_instance_database, handle,
+		(void *)&instance);
+	if (res != 0) {
+		return (0);
+	}
+
+	res = instance->totem_config->interfaces[0].boundto.nodeid;
+
+	hdb_handle_put (&totemsrp_instance_database, handle);
+	return (res);
+}
+
+int totemsrp_my_family_get (
+	totemsrp_handle handle)
+{
+	struct totemsrp_instance *instance;
+	int res;
+
+	res = hdb_handle_get (&totemsrp_instance_database, handle,
+		(void *)&instance);
+	if (res != 0) {
+		return (0);
+	}
+
+	res = instance->totem_config->interfaces[0].boundto.family;
+
+	hdb_handle_put (&totemsrp_instance_database, handle);
+	return (res);
+}
+
+
 int totemsrp_ring_reenable (
         totemsrp_handle handle)
 {
Index: exec/totemsrp.h
===================================================================
--- exec/totemsrp.h	(revision 1486)
+++ exec/totemsrp.h	(revision 1493)
@@ -104,6 +104,12 @@
 	char ***status,
 	unsigned int *iface_count);
 
+extern int totemsrp_my_nodeid_get (
+	totemsrp_handle handle);
+
+extern int totemsrp_my_family_get (
+	totemsrp_handle handle);
+
 extern int totemsrp_ring_reenable (
 	totemsrp_handle handle);
 
Index: exec/main.c
===================================================================
--- exec/main.c	(revision 1486)
+++ exec/main.c	(revision 1493)
@@ -120,8 +120,6 @@
 }
 
 
-struct totem_ip_address *this_ip;
-struct totem_ip_address this_non_loopback_ip;
 #define LOCALHOST_IP inet_addr("127.0.0.1")
 
 totempg_groups_handle openais_group_handle;
@@ -214,10 +212,6 @@
 
 	memcpy (&aisexec_ring_id, ring_id, sizeof (struct memb_ring_id));
 
-	if (!totemip_localhost_check(this_ip)) {
-		totemip_copy(&this_non_loopback_ip, this_ip);
-	}
-
 	/*
 	 * Call configuration change for all services
 	 */
@@ -413,10 +407,6 @@
 	log_printf (LOG_LEVEL_NOTICE, "Copyright (C) 2002-2006 MontaVista Software, Inc and contributors.\n");
 	log_printf (LOG_LEVEL_NOTICE, "Copyright (C) 2006 Red Hat, Inc.\n");
 
-	memset(&this_non_loopback_ip, 0, sizeof(struct totem_ip_address));
-
-	totemip_localhost(AF_INET, &this_non_loopback_ip);
-
 	signal (SIGINT, sigintr_handler);
 	signal (SIGUSR2, sigusr2_handler);
 	signal (SIGSEGV, sigsegv_handler);
@@ -562,8 +552,6 @@
 	/*
 	 * This must occur after totempg is initialized because "this_ip" must be set
 	 */
-	this_ip = &totem_config.interfaces[0].boundto;
-
 	res = openais_service_init_all (service_count, objdb);
 	if (res == -1) {
 		log_printf (LOG_LEVEL_ERROR, "Could not init services\n");
@@ -591,8 +579,7 @@
 	openais_ipc_init (
 		serialize_mutex_lock,
 		serialize_mutex_unlock,
-		gid_valid,
-		&this_non_loopback_ip);
+		gid_valid);
 
 	/*
 	 * Start main processing loop
Index: exec/msg.c
===================================================================
--- exec/msg.c	(revision 1486)
+++ exec/msg.c	(revision 1493)
@@ -675,9 +675,6 @@
 	/*
 	 *  Initialize the saved ring ID.
 	 */
-//	saved_ring_id.seq = 0;
-//	saved_ring_id.rep.s_addr = this_ip->sin_addr.s_addr;		
-	
 	return (0);
 }
 
Index: exec/main.h
===================================================================
--- exec/main.h	(revision 1486)
+++ exec/main.h	(revision 1493)
@@ -53,8 +53,6 @@
 
 #define SIZEINB MESSAGE_SIZE_MAX
 
-extern struct totem_ip_address *this_ip;
-
 extern struct totempg_group openais_group;
 
 extern totempg_groups_handle openais_group_handle;

revision-1496.patch:

--- NEW FILE revision-1496.patch ---
Index: exec/totempg.c
===================================================================
--- exec/totempg.c	(revision 1493)
+++ exec/totempg.c	(revision 1496)
@@ -91,7 +91,6 @@
 #include <assert.h>
 #include <pthread.h>
 #include <errno.h>
-#include <unistd.h>
 
 #include "../include/hdb.h"
 #include "../include/list.h"
@@ -280,7 +279,7 @@
 	list_add (&assembly->list, &assembly_list_free);
 }
 
-static void app_confchg_fn (
+static inline void app_confchg_fn (
 	enum totem_configuration_type configuration_type,
 	unsigned int *member_list, int member_list_entries,
 	unsigned int *left_list, int left_list_entries,
@@ -313,7 +312,7 @@
 	}
 }
 
-static void group_endian_convert (
+static inline void group_endian_convert (
 	struct iovec *iovec)
 {
 	unsigned short *group_len;
@@ -324,9 +323,10 @@
 	for (i = 1; i < group_len[0] + 1; i++) {
 		group_len[i] = swab16(group_len[i]);
 	}
+
 }
 
-static int group_matches (
+static inline int group_matches (
 	struct iovec *iovec,
 	unsigned int iov_len,
 	struct totempg_group *groups_b,
@@ -346,8 +346,7 @@
 	 */
 	if ((size_t)iovec->iov_base % 4 != 0) {
 		iovec_aligned.iov_base = alloca(iovec->iov_len);
-		memcpy(iovec_aligned.iov_base, iovec->iov_base, iovec->iov_len);
-        iovec_aligned.iov_len = iovec->iov_len;
+		memcpy(iovec_aligned.iov_base, iovec->iov_base, iovec->iov_len);                iovec_aligned.iov_len = iovec->iov_len;
 		iovec = &iovec_aligned;
 	}
 
@@ -381,7 +380,7 @@
 }
 	
 
-static void app_deliver_fn (
+static inline void app_deliver_fn (
 	unsigned int nodeid,
 	struct iovec *iovec,
 	unsigned int iov_len,
@@ -394,17 +393,17 @@
 	unsigned int res;
         struct iovec aligned_iovec = { NULL, 0 };
 
+	if (endian_conversion_required) {
+		group_endian_convert (iovec);
+	}
+
 	/*
 	 * Align data structure for sparc and ia64
 	 */
 	aligned_iovec.iov_base = alloca(iovec->iov_len);
 	aligned_iovec.iov_len = iovec->iov_len;
-	assert (aligned_iovec.iov_base != NULL);
 	memcpy(aligned_iovec.iov_base, iovec->iov_base, iovec->iov_len);
 	iovec = &aligned_iovec;
-	if (endian_conversion_required) {
-		group_endian_convert (&aligned_iovec);
-	}
 
 	for (i = 0; i <= totempg_max_handle; i++) {
 		res = hdb_handle_get (&totempg_groups_instance_database,
@@ -412,9 +411,9 @@
 
 		if (res == 0) {
 			assert (iov_len == 1);
-			if (group_matches (&aligned_iovec, iov_len, instance->groups, instance->groups_cnt, &adjust_iovec)) {
-				stripped_iovec.iov_len = aligned_iovec.iov_len - adjust_iovec;
-//				stripped_iovec.iov_base = (char *)aligned_iovec.iov_base + adjust_iovec;
+			if (group_matches (iovec, iov_len, instance->groups, instance->groups_cnt, &adjust_iovec)) {
+				stripped_iovec.iov_len = iovec->iov_len - adjust_iovec;
+//				stripped_iovec.iov_base = (char *)iovec->iov_base + adjust_iovec;
 
 				/*
 				 * Align data structure for sparc and ia64
@@ -464,11 +463,11 @@
 	int endian_conversion_required)
 {
 	struct totempg_mcast *mcast;
-	unsigned short *msg_lens_from_msg;
-	unsigned short msg_lens[1500];
-	unsigned short mcast_msg_count;
+	unsigned short *msg_lens;
 	int i;
 	struct assembly *assembly;
+	char header[FRAME_SIZE_MAX];
+	int h_index;
 	int a_i = 0;
 	int msg_count;
 	int continuation;
@@ -477,15 +476,8 @@
 	assembly = assembly_ref (nodeid);
 	assert (assembly);
 
-	mcast = (struct totempg_mcast *)iovec[0].iov_base;
-	if (endian_conversion_required) {
-		mcast_msg_count = swab16 (mcast->msg_count);
-	} else {
-		mcast_msg_count = mcast->msg_count;
-	}
-	msg_count = mcast_msg_count;
-
 	/*
+	 * Assemble the header into one block of data and
 	 * assemble the packet contents into one block of data to simplify delivery
 	 */
 	if (iov_len == 1) {
@@ -496,36 +488,44 @@
 		char *data;
 		int datasize;
 
-		msg_lens_from_msg = (unsigned short *) (iovec[0].iov_base +
-			sizeof (struct totempg_mcast));
-		for (i = 0; i < mcast_msg_count; i++) {
-			msg_lens[i] = swab16 (msg_lens_from_msg[i]);
+		mcast = (struct totempg_mcast *)iovec[0].iov_base;
+		if (endian_conversion_required) {
+			mcast->msg_count = swab16 (mcast->msg_count);
 		}
 
+		msg_count = mcast->msg_count;
 		datasize = sizeof (struct totempg_mcast) +
-			mcast_msg_count * sizeof (unsigned short);
+			msg_count * sizeof (unsigned short);
 		
+		memcpy (header, iovec[0].iov_base, datasize);
 		assert(iovec);
 		data = iovec[0].iov_base;
 
-		memcpy (&assembly->data[assembly->index], &data[datasize],
-			iovec[0].iov_len - datasize);
-	} else {
-		msg_lens_from_msg = (unsigned short *)iovec[1].iov_base;
+		msg_lens = (unsigned short *) (header + sizeof (struct totempg_mcast));
 		if (endian_conversion_required) {
-			for (i = 0; i < mcast_msg_count; i++) {
-				msg_lens[i] = swab16 (msg_lens_from_msg[i]);
+			for (i = 0; i < mcast->msg_count; i++) {
+				msg_lens[i] = swab16 (msg_lens[i]);
 			}
-		} else {
-			for (i = 0; i < mcast_msg_count; i++) {
-				msg_lens[i] = msg_lens_from_msg[i];
-			}
 		}
 
+		memcpy (&assembly->data[assembly->index], &data[datasize],
+			iovec[0].iov_len - datasize);
+	} else {
 		/* 
 		 * The message originated from local processor  
-		 * because there is greater than one iovec for the full msg.
+		 * becasue there is greater than one iovec for then full msg.
 		 */
+		h_index = 0;
+		for (i = 0; i < 2; i++) {
+			memcpy (&header[h_index], iovec[i].iov_base, iovec[i].iov_len);
+			h_index += iovec[i].iov_len;
+		}
+
+		mcast = (struct totempg_mcast *)header;
+// TODO make sure we are using a copy of mcast not the actual data itself
+
+		msg_lens = (unsigned short *) (header + sizeof (struct totempg_mcast));
+
 		for (i = 2; i < iov_len; i++) {
 			a_i = assembly->index;
 			assert (iovec[i].iov_len + a_i <= MESSAGE_SIZE_MAX);
@@ -541,7 +541,7 @@
 	 * then adjust the assembly buffer so we can add the rest of the 
 	 * fragment when it arrives.
 	 */
-	msg_count = mcast->fragmented ? mcast_msg_count - 1 : mcast_msg_count;
+	msg_count = mcast->fragmented ? mcast->msg_count - 1 : mcast->msg_count;
 	continuation = mcast->continuation;
 	iov_delv.iov_base = &assembly->data[0];
 	iov_delv.iov_len = assembly->index + msg_lens[0];
@@ -567,8 +567,7 @@
 		}
 
 		if ((assembly->index == 0) ||
-			(!continuation && assembly->index)) {
-
+							(!continuation && assembly->index)) {
 			log_printf (totempg_log_level_error,
 				"Throwing away broken message: continuation %u, index %u\n",
 				continuation, assembly->index);
@@ -610,7 +609,7 @@
 		 * Message is fragmented, keep around assembly list
 		 */
 		assembly->last_frag_num = mcast->fragmented;
-		if (mcast_msg_count > 1) {
+		if (mcast->msg_count > 1) {
 			memmove (&assembly->data[0],
 				&assembly->data[assembly->index],
 				msg_lens[msg_count]);

revision-1497.patch:

--- NEW FILE revision-1497.patch ---
Index: init/redhat
===================================================================
--- init/redhat	(revision 1496)
+++ init/redhat	(revision 1497)
@@ -15,6 +15,7 @@
 lockfile="/var/lock/subsys/$prog"
 
 start() {
+    [ -x "$exec" ] || exit 5
     echo -n $"Starting OpenAIS daemon ($prog): "
     daemon $exec
     retval=$?

revision-1498.patch:

--- NEW FILE revision-1498.patch ---
Index: exec/util.c
===================================================================
--- exec/util.c	(revision 1497)
+++ exec/util.c	(revision 1498)
@@ -84,10 +84,88 @@
 	return time_now;
 }
 
+struct error_code_entry {
+	enum e_ais_done code;
+	char *string;
+};
 
+static struct error_code_entry error_code_map[] = {
+        {
+		.code = AIS_DONE_EXIT, 
+		.string = "finished, exiting normally"
+	},
+        {
+		.code = AIS_DONE_UID_DETERMINE,
+		.string = "could not determine the process UID"
+	},
+        {
+		.code = AIS_DONE_GID_DETERMINE,
+		.string = "could not determine the process GID"
+	},
+        {
+		.code = AIS_DONE_MEMPOOL_INIT,
+		.string = "could not initialize the memory pools"
+	},
+        {
+		.code = AIS_DONE_FORK,
+		.string = "could not fork"
+	},
+        {
+		.code = AIS_DONE_LIBAIS_SOCKET,
+		.string = "could not create a socket"
+	},
+        {
+		.code = AIS_DONE_LIBAIS_BIND,
+		.string = "could not bind to an address"
+	},
+        {
+		.code = AIS_DONE_READKEY,
+		.string = "could not read the security key"
+	},
+        {
+		.code = AIS_DONE_MAINCONFIGREAD,
+		.string = "could not read the main configuration file"
+	},
+        {
+		.code = AIS_DONE_LOGSETUP,
+		.string = "could not setup the logging system"
+	},
+        {
+		.code = AIS_DONE_AMFCONFIGREAD,
+		.string = "could not read the AMF configuration"
+	},
+        {
+		.code = AIS_DONE_DYNAMICLOAD,
+		.string = "could not load a dynamic object"
+	},
+        {	.code = AIS_DONE_OBJDB,
+		.string = "could not use the object database"
+	},
+        {
+		.code = AIS_DONE_INIT_SERVICES,
+		.string = "could not initlalize services"
+	},
+        {
+		.code = AIS_DONE_OUT_OF_MEMORY,
+		.string = "Out of memory"
+	},
+        {
+		.code =  AIS_DONE_FATAL_ERR,
+		.string = "Unknown fatal error"
+	},
+};
+
 void openais_exit_error (enum e_ais_done err)
 {
-	log_printf (LOG_LEVEL_ERROR, "AIS Executive exiting (%d).\n", err);
+	char *error_string = "Error code not available";
+	int i;
+
+	for (i = 0; i < (sizeof (error_code_map) / sizeof (struct error_code_entry)); i++) {
+		if (err == error_code_map[i].code) {
+			error_string = error_code_map[i].string;
+		}
+	}
+	log_printf (LOG_LEVEL_ERROR, "AIS Executive exiting (reason: %s).\n", error_string);
 	log_flush();
 	exit (err);
 }

revision-1499.patch:

--- NEW FILE revision-1499.patch ---
Index: exec/cfg.c
===================================================================
--- exec/cfg.c	(revision 1498)
+++ exec/cfg.c	(revision 1499)
@@ -268,7 +268,7 @@
 		res_lib_cfg_ringreenable.header.id = MESSAGE_RES_CFG_RINGREENABLE;
 		res_lib_cfg_ringreenable.header.size = sizeof (struct res_lib_cfg_ringreenable);
 		res_lib_cfg_ringreenable.header.error = SA_AIS_OK;
-		openais_conn_send_response (
+		openais_response_send (
 			req_exec_cfg_ringreenable->source.conn,
 			&res_lib_cfg_ringreenable,
 			sizeof (struct res_lib_cfg_ringreenable));
@@ -312,7 +312,7 @@
 		strcpy ((char *)&res_lib_cfg_ringstatusget.interface_name[i],
 			totem_ip_string);
 	}
-	openais_conn_send_response (
+	openais_response_send (
 		conn,
 		&res_lib_cfg_ringstatusget,
 		sizeof (struct res_lib_cfg_ringstatusget));
Index: exec/evs.c
===================================================================
--- exec/evs.c	(revision 1498)
+++ exec/evs.c	(revision 1499)
@@ -244,7 +244,8 @@
 	 */
 	for (list = confchg_notify.next; list != &confchg_notify; list = list->next) {
 		evs_pd = list_entry (list, struct evs_pd, list);
-		openais_conn_send_response (evs_pd->conn,
+		openais_dispatch_send (
+			evs_pd->conn,
 			&res_evs_confchg_callback,
 			sizeof (res_evs_confchg_callback));
 	}
@@ -262,7 +263,9 @@
 	list_init (&evs_pd->list);
 	list_add (&evs_pd->list, &confchg_notify);
 
-	openais_conn_send_response (conn, &res_evs_confchg_callback,
+	openais_dispatch_send (
+		conn,
+		&res_evs_confchg_callback,
 		sizeof (res_evs_confchg_callback));
 
 	return (0);
@@ -308,7 +311,9 @@
 	res_lib_evs_join.header.id = MESSAGE_RES_EVS_JOIN;
 	res_lib_evs_join.header.error = error;
 
-	openais_conn_send_response (conn, &res_lib_evs_join,
+	openais_response_send (
+		conn,
+		&res_lib_evs_join,
 		sizeof (struct res_lib_evs_join));
 }
 
@@ -354,7 +359,9 @@
 	res_lib_evs_leave.header.id = MESSAGE_RES_EVS_LEAVE;
 	res_lib_evs_leave.header.error = error;
 
-	openais_conn_send_response (conn, &res_lib_evs_leave,
+	openais_response_send (
+		conn,
+		&res_lib_evs_leave,
 		sizeof (struct res_lib_evs_leave));
 }
 
@@ -397,7 +404,9 @@
 	res_lib_evs_mcast_joined.header.id = MESSAGE_RES_EVS_MCAST_JOINED;
 	res_lib_evs_mcast_joined.header.error = error;
 
-	openais_conn_send_response (conn, &res_lib_evs_mcast_joined,
+	openais_response_send (
+		conn,
+		&res_lib_evs_mcast_joined,
 		sizeof (struct res_lib_evs_mcast_joined));
 }
 
@@ -443,7 +452,9 @@
 	res_lib_evs_mcast_groups.header.id = MESSAGE_RES_EVS_MCAST_GROUPS;
 	res_lib_evs_mcast_groups.header.error = error;
 
-	openais_conn_send_response (conn, &res_lib_evs_mcast_groups,
+	openais_response_send (
+		conn,
+		&res_lib_evs_mcast_groups,
 		sizeof (struct res_lib_evs_mcast_groups));
 }
 
@@ -462,7 +473,9 @@
 	res_lib_evs_membership_get.member_list_entries =
 		res_evs_confchg_callback.member_list_entries;
 
-	openais_conn_send_response (conn, &res_lib_evs_membership_get,
+	openais_response_send (
+		conn,
+		&res_lib_evs_membership_get,
 		sizeof (struct res_lib_evs_membership_get));
 }
 
@@ -487,8 +500,10 @@
 	int i, j;
 	struct evs_pd *evs_pd;
 
-	res_evs_deliver_callback.header.size = sizeof (struct res_evs_deliver_callback) +
-		req_exec_evs_mcast->msg_len;
+	res_evs_deliver_callback.header.size =
+		sizeof (struct res_evs_deliver_callback) +
+			req_exec_evs_mcast->msg_len;
+
 	res_evs_deliver_callback.header.id = MESSAGE_RES_EVS_DELIVER_CALLBACK;
 	res_evs_deliver_callback.header.error = SA_AIS_OK;
 	res_evs_deliver_callback.msglen = req_exec_evs_mcast->msg_len;
@@ -517,9 +532,13 @@
 
 		if (found) {
 			res_evs_deliver_callback.local_nodeid = nodeid;
-			openais_conn_send_response (evs_pd->conn, &res_evs_deliver_callback,
+			openais_dispatch_send (
+				evs_pd->conn,
+				&res_evs_deliver_callback,
 				sizeof (struct res_evs_deliver_callback));
-			openais_conn_send_response (evs_pd->conn, msg_addr,
+			openais_dispatch_send (
+				evs_pd->conn,
+				msg_addr,
 				req_exec_evs_mcast->msg_len);
 		}
 	}
Index: exec/cpg.c
===================================================================
--- exec/cpg.c	(revision 1498)
+++ exec/cpg.c	(revision 1499)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006-2007 Red Hat, Inc.
+ * Copyright (c) 2006 Red Hat, Inc.
  * Copyright (c) 2006 Sun Microsystems, Inc.
  *
  * All rights reserved.
@@ -32,6 +32,9 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
+#ifndef OPENAIS_BSD
+#include <alloca.h>
+#endif
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/un.h>
@@ -60,8 +63,11 @@
 #include "totempg.h"
 #include "totemip.h"
 #include "main.h"
+#include "flow.h"
+#include "tlist.h"
 #include "ipc.h"
 #include "mempool.h"
+#include "objdb.h"
 #include "service.h"
 #include "jhash.h"
 #include "swab.h"
@@ -255,7 +261,7 @@
 };
 
 struct openais_service_handler cpg_service_handler = {
-	.name				        = (unsigned char*)"openais cluster closed process group service v1.01",
+	.name				        = (unsigned char *)"openais cluster closed process group service v1.01",
 	.id					= CPG_SERVICE,
 	.private_data_size			= sizeof (struct process_info),
 	.flow_control				= OPENAIS_FLOW_CONTROL_REQUIRED,
@@ -434,14 +440,14 @@
 	}
 
 	if (conn) {
-		openais_conn_send_response(conn, buf, size);
+		openais_dispatch_send(conn, buf, size);
 	}
 	else {
 		/* Send it to all listeners */
 		for (iter = gi->members.next, tmp=iter->next; iter != &gi->members; iter = tmp, tmp=iter->next) {
 			struct process_info *pi = list_entry(iter, struct process_info, list);
 			if (pi->trackerconn && (pi->flags & PI_FLAG_MEMBER)) {
-				if (openais_conn_send_response(pi->trackerconn, buf, size) == -1) {
+				if (openais_dispatch_send(pi->trackerconn, buf, size) == -1) {
 					// Error ??
 				}
 			}
@@ -477,14 +483,17 @@
 	struct group_info *gi = pi->group;
 	mar_cpg_address_t notify_info;
 
-	log_printf(LOG_LEVEL_DEBUG, "exit_fn for conn=%p\n", conn);
-
 	if (gi) {
 		notify_info.pid = pi->pid;
 		notify_info.nodeid = totempg_my_nodeid_get();
[...2559 lines suppressed...]
 			&res_lib_lck_resourceclose,
 			sizeof (struct res_lib_lck_resourceclose));
 	}
Index: exec/msg.c
===================================================================
--- exec/msg.c	(revision 1498)
+++ exec/msg.c	(revision 1499)
@@ -807,12 +807,12 @@
 				&req_exec_msg_queueopen->source,
 				sizeof (mar_message_source_t));
 
-			openais_conn_send_response (
+			openais_response_send (
 				req_exec_msg_queueopen->source.conn,
 				&res_lib_msg_queueopenasync,
 				sizeof (struct res_lib_msg_queueopenasync));
-			openais_conn_send_response (
-				openais_conn_partner_get (req_exec_msg_queueopen->source.conn),
+			openais_dispatch_send (
+				req_exec_msg_queueopen->source.conn,
 				&res_lib_msg_queueopenasync,
 				sizeof (struct res_lib_msg_queueopenasync));
 		} else {
@@ -826,7 +826,7 @@
 				&req_exec_msg_queueopen->source,
 				sizeof (mar_message_source_t));
 
-			openais_conn_send_response (
+			openais_dispatch_send (
 				req_exec_msg_queueopen->source.conn,
 				&res_lib_msg_queueopen,
 				sizeof (struct res_lib_msg_queueopen));
@@ -865,8 +865,10 @@
 		res_lib_msg_queueclose.header.size = sizeof (struct res_lib_msg_queueclose);
 		res_lib_msg_queueclose.header.id = MESSAGE_RES_MSG_QUEUECLOSE;
 		res_lib_msg_queueclose.header.error = error;
-		openais_conn_send_response (req_exec_msg_queueclose->source.conn,
-			&res_lib_msg_queueclose, sizeof (struct res_lib_msg_queueclose));
+		openais_dispatch_send (
+			req_exec_msg_queueclose->source.conn,
+			&res_lib_msg_queueclose,
+			sizeof (struct res_lib_msg_queueclose));
 	}
 }
 
@@ -927,7 +929,7 @@
 		res_lib_msg_queuegroupcreate.header.id = MESSAGE_RES_MSG_QUEUEGROUPCREATE;
 		res_lib_msg_queuegroupcreate.header.error = error;
 
-		openais_conn_send_response (
+		openais_dispatch_send (
 			req_exec_msg_queuegroupcreate->source.conn,
 			&res_lib_msg_queuegroupcreate,
 			sizeof (struct res_lib_msg_queuegroupcreate));
@@ -974,7 +976,7 @@
 		res_lib_msg_queuegroupinsert.header.id = MESSAGE_RES_MSG_QUEUEGROUPCREATE;
 		res_lib_msg_queuegroupinsert.header.error = error;
 
-		openais_conn_send_response (
+		openais_dispatch_send (
 			req_exec_msg_queuegroupinsert->source.conn,
 			&res_lib_msg_queuegroupinsert,
 			sizeof (struct res_lib_msg_queuegroupinsert));
@@ -1018,7 +1020,7 @@
 		res_lib_msg_queuegroupremove.header.id = MESSAGE_RES_MSG_QUEUEGROUPCREATE;
 		res_lib_msg_queuegroupremove.header.error = error;
 
-		openais_conn_send_response (
+		openais_dispatch_send (
 			req_exec_msg_queuegroupremove->source.conn,
 			&res_lib_msg_queuegroupremove,
 			sizeof (struct res_lib_msg_queuegroupremove));
@@ -1049,7 +1051,7 @@
 		res_lib_msg_queuegroupdelete.header.id = MESSAGE_RES_MSG_QUEUEGROUPCREATE;
 		res_lib_msg_queuegroupdelete.header.error = error;
 
-		openais_conn_send_response (
+		openais_dispatch_send (
 			req_exec_msg_queuegroupdelete->source.conn,
 			&res_lib_msg_queuegroupdelete,
 			sizeof (struct res_lib_msg_queuegroupdelete));
Index: lib/cpg.c
===================================================================
--- lib/cpg.c	(revision 1498)
+++ lib/cpg.c	(revision 1499)
@@ -107,8 +107,7 @@
 		goto error_destroy;
 	}
 
-	error = saServiceConnect (&cpg_inst->dispatch_fd,
-				     &cpg_inst->response_fd,
+	error = saServiceConnect (&cpg_inst->response_fd, &cpg_inst->dispatch_fd,
 		CPG_SERVICE);
 	if (error != SA_AIS_OK) {
 		goto error_put_destroy;
@@ -461,7 +460,7 @@
 	iov[0].iov_base = &req_lib_cpg_trackstart;
 	iov[0].iov_len = sizeof (struct req_lib_cpg_trackstart);
 
-	error = saSendMsgReceiveReply (cpg_inst->dispatch_fd, iov, 1,
+	error = saSendMsgReceiveReply (cpg_inst->response_fd, iov, 1,
 		&res_lib_cpg_trackstart, sizeof (struct res_lib_cpg_trackstart));
 
 	if (error != SA_AIS_OK) {
Index: README.devmap
===================================================================
--- README.devmap	(revision 1498)
+++ README.devmap	(revision 1499)
@@ -1221,3 +1221,91 @@
 for other people.
 
 Have fun!
+
+---
+IPC state machine
+
+lib_exit_fn may not use openais_response_send or openais_dispatch_send
+
+state INITIALIZING
+------------------
+receive response end of a library request
+	create conn_io data structure
+	if the connection's UID/GID is invalid
+		conn_io_disconnect
+	send response to conn_io with conn_io's address
+	set conn_io refcnt to 1
+
+receive dispatch end of a library connection with response end conn_io address
+	find matching connection
+	if the connection's UID/GID is invalid
+		conn_io_disconnect
+	send reponse to conn_io
+	create conn_info data structure
+	if conn_io response end is valid
+		store dispatch end of conn_io into conn_info data structure
+		store response conn_io into conn_info data structure
+	set conn_io refcnt to 1
+	call lib_init_fn for service type
+	set conn_info refcnt to 1
+	set state to ACTIVE
+
+event response disconnects and conn_info not bound
+	disconnect connection
+event receive connects and response connection not found
+	disconnect dispatch
+event no dispatch connection within 5 seconds
+	disconnect dispatch
+event disconnect_request
+	set state to DISCONNECT_REQUESTED
+	decrement response conn_io refcnt by 1
+	decrement dispatch conn_io refcnt by 1
+
+state ACTIVE
+------------
+do {
+	increment conn_io refcnt by 1
+	poll
+	if invalid poll set state internal_disconnect_request
+	dispatch library handler functions
+	flush any output that can be flushed
+	decrement conn_io refcnt by 1
+	if state set to DISCONNECT_REQUESTED
+		execute algorithm for disconnect requested state
+}
+
+event internal_disconnect_request
+	set state to DISCONNECT_REQUESTED
+	decrement response conn_io refcnt by 1
+	decrement dispatch conn_io refcnt by 1
+event openais_conn_refcnt_increment
+	increase conn_info reference count by 1
+event openais_conn_refcnt_decrement
+	decrease conn_info reference count by 1
+
+state DISCONNECT_REQUESTED
+--------------------------
+if this is the response conn_io data
+do {
+	if response conn_io refcnt is 0
+		destroy conn_io data structure
+		decrement conn_info reference count
+		exit thread
+	sleep configurable short duration
+}
+
+if this is the dispatch conn_io data
+do {
+	if dispatch conn_io refcnt is 0
+		call lib_exit_fn
+		if successful
+			destroy conn_io data structure
+			decrement conn_info reference count
+			exit thread
+	sleep configurable short duration
+}
+
+when conn_info reference count equals 0
+	free conn_info data structure
+
+

revision-1500.patch:

--- NEW FILE revision-1500.patch ---
Index: exec/ipc.c
===================================================================
--- exec/ipc.c	(revision 1499)
+++ exec/ipc.c	(revision 1500)
@@ -605,15 +605,28 @@
 		ipc_serialize_lock_fn ();
 
 		if (fds == 1 && ufd.revents) {
-			if ((ufd.revents & (POLLERR|POLLHUP)) ||
-				(conn_info &&
-					conn_info->state == CONN_INFO_STATE_DISCONNECT_REQUESTED)) {
+			if (ufd.revents & (POLLERR|POLLHUP)) {
 				disconnect_request (conn_info);
+				conn_info_refcnt_dec (conn_info);
+				conn_io_refcnt_dec (conn_io);
+				/*
+				 * If conn_info not set, wait for it to be set
+				 * else break out of for loop
+				 */
+				if (conn_info == NULL) {
+					ipc_serialize_unlock_fn ();
+					continue;
+				} else {
+					ipc_serialize_unlock_fn ();
+					break;
+				}
+			}
 
+			if (conn_info && conn_info->state == CONN_INFO_STATE_DISCONNECT_REQUESTED) {
+				conn_info_refcnt_dec (conn_info);
 				conn_io_refcnt_dec (conn_io);
-				conn_info_refcnt_dec (conn_info);
 				ipc_serialize_unlock_fn ();
-				break; /* from for */
+				break;
 			}
 			
 			if (ufd.revents & POLLOUT) {

revision-1501.patch:

--- NEW FILE revision-1501.patch ---
Index: exec/cpg.c
===================================================================
--- exec/cpg.c	(revision 1500)
+++ exec/cpg.c	(revision 1501)
@@ -934,7 +934,7 @@
 	/* Send to all interested members */
 	for (iter = gi->members.next; iter != &gi->members; iter = iter->next) {
 		struct process_info *pi = list_entry(iter, struct process_info, list);
-		if (pi->trackerconn) {
+		if (pi->trackerconn && (pi->flags & PI_FLAG_MEMBER)) {
 			openais_dispatch_send (
 				pi->trackerconn,
 				buf,

revision-1502.patch:

--- NEW FILE revision-1502.patch ---
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c	(revision 1501)
+++ exec/totemsrp.c	(revision 1502)
@@ -495,8 +495,6 @@
 	unsigned int my_pbl;
 
 	unsigned int my_cbl;
-
-	unsigned int operational_entered_once;
 };
 
 struct message_handlers {
@@ -1682,8 +1680,6 @@
 
 	instance->my_received_flg = 0;
 
-	instance->operational_entered_once = 1;
-
 	return;
 }
 
@@ -2769,17 +2765,7 @@
 
 	totemip_copy(&commit_token->ring_id.rep, &instance->my_id.addr[0]);
 
-	/*
-	 * The first time operational is entered, don't increment the ring
-	 * sequence number (just reload it from stable storage).  This prevents
-	 * an error condition where if the executive is stopped and started
-	 * before a new ring is formed, the protocol will get stuck in recovery.
-	 */
-	if (instance->operational_entered_once) {
-		commit_token->ring_id.seq = instance->token_ring_id_seq + 4;
-	} else {
-		commit_token->ring_id.seq = instance->token_ring_id_seq;
-	}
+	commit_token->ring_id.seq = instance->token_ring_id_seq + 4;
 
 	/*
 	 * This qsort is necessary to ensure the commit token traverses

revision-1503.patch:

--- NEW FILE revision-1503.patch ---
Index: exec/main.c
===================================================================
--- exec/main.c	(revision 1502)
+++ exec/main.c	(revision 1503)
@@ -270,7 +270,6 @@
 
 static void aisexec_tty_detach (void)
 {
-#ifndef DEBUG
 	/*
 	 * Disconnect from TTY if this is not a debug run
 	 */
@@ -287,7 +286,6 @@
 			exit (0);
 			break;
 	}
-#endif
 }
 
 static void aisexec_setscheduler (void)
@@ -400,9 +398,27 @@
 	int res;
  	int totem_log_service;
  	log_init ("MAIN");
+	unsigned int background;
+	int ch;
 
-	aisexec_tty_detach ();
+	background = 1;
 
+	while ((ch = getopt (argc, argv, "fp")) != EOF) {
+		switch (ch) {
+			case 'f':
+				background = 0;
+				break;
+			default:
+				fprintf (stderr, "Usage:\n");
+				fprintf (stderr, "	-f	: Start application in forground.\n");
+				return EXIT_FAILURE;
+		}
+	}
+
+	if (background) {
+		aisexec_tty_detach ();
+	}
+
 	log_printf (LOG_LEVEL_NOTICE, "AIS Executive Service RELEASE '%s'\n", RELEASE_VERSION);
 	log_printf (LOG_LEVEL_NOTICE, "Copyright (C) 2002-2006 MontaVista Software, Inc and contributors.\n");
 	log_printf (LOG_LEVEL_NOTICE, "Copyright (C) 2006 Red Hat, Inc.\n");

revision-1504.patch:

--- NEW FILE revision-1504.patch ---
Index: exec/ckpt.c
===================================================================
--- exec/ckpt.c	(revision 1503)
+++ exec/ckpt.c	(revision 1504)
@@ -377,11 +377,11 @@
 
 static struct list_head *my_iteration_state_section;
 
-static unsigned int my_member_list[PROCESSOR_COUNT_MAX];
+static unsigned int my_old_member_list[PROCESSOR_COUNT_MAX];
 
-static unsigned int my_member_list_entries = 0;
+static unsigned int my_old_member_list_entries = 0;
 
-static unsigned int my_lowest_nodeid = 0;
+static unsigned int my_should_sync = 0;
 
 struct checkpoint_cleanup {
 	struct list_head list;
@@ -809,38 +809,33 @@
 	struct memb_ring_id *ring_id)
 {
 	unsigned int i, j;
+	unsigned int lowest_nodeid;
 
-	/*
-	 * Determine lowest nodeid in old regular configuration for the
-	 * purpose of executing the synchronization algorithm
-	 */
-	if (configuration_type == TOTEM_CONFIGURATION_TRANSITIONAL) {
-		for (i = 0; i < left_list_entries; i++) {
-			for (j = 0; j < my_member_list_entries; j++) {
-				if (left_list[i] == my_member_list[j]) {
-					my_member_list[j] = 0;
-				}
-			}
-		}	
-	}
-	
-	my_lowest_nodeid = 0xffffffff;
+	my_should_sync = 0;
 
 	/*
 	 * Handle regular configuration
 	 */
+	lowest_nodeid = 0xffffffff;
+
 	if (configuration_type == TOTEM_CONFIGURATION_REGULAR) {
-		memcpy (my_member_list, member_list,
-			sizeof (unsigned int) * member_list_entries);
-		my_member_list_entries = member_list_entries;
+		for (i = 0; i < my_old_member_list_entries; i++) {
+			for (j = 0; j < member_list_entries; j++) {
+				if (my_old_member_list[i] == member_list[j]) {
+					if (lowest_nodeid > member_list[j]) {
+						lowest_nodeid = member_list[j];
+					}
+				}
+			}
+		}
 		memcpy (&my_saved_ring_id, ring_id,
 			sizeof (struct memb_ring_id));
-		for (i = 0; i < my_member_list_entries; i++) {
-			if ((my_member_list[i] != 0) &&
-				(my_member_list[i] < my_lowest_nodeid)) {
+		memcpy (my_old_member_list, member_list,
+			sizeof (unsigned int) * member_list_entries);
+		my_old_member_list_entries = member_list_entries;
 
-				my_lowest_nodeid = my_member_list[i];
-			}
+		if (lowest_nodeid == totempg_my_nodeid_get()) {
+			my_should_sync = 1;
 		}
 	}
 }
@@ -2658,8 +2653,6 @@
 	struct req_exec_ckpt_sectioncreate req_exec_ckpt_sectioncreate;
 	struct iovec iovecs[2];
 
-	log_printf (LOG_LEVEL_DEBUG, "Section create from conn %p\n", conn);
-
 	req_exec_ckpt_sectioncreate.header.id =
 		SERVICE_ID_MAKE (CKPT_SERVICE,
 			MESSAGE_REQ_EXEC_CKPT_SECTIONCREATE);
@@ -2695,7 +2688,6 @@
 	}
 
 	if (iovecs[1].iov_len > 0) {
-		log_printf (LOG_LEVEL_DEBUG, "IOV_BASE is %p\n", iovecs[1].iov_base);
 		assert (totempg_groups_mcast_joined (openais_group_handle, iovecs, 2, TOTEMPG_AGREED) == 0);
 	} else {
 		assert (totempg_groups_mcast_joined (openais_group_handle, iovecs, 1, TOTEMPG_AGREED) == 0);
@@ -3575,7 +3567,7 @@
 
 	switch (my_sync_state) {
 	case SYNC_STATE_CHECKPOINT:
-		if (my_lowest_nodeid == totempg_my_nodeid_get()) {
+		if (my_should_sync) {
 			TRACE1 ("should transmit checkpoints because lowest member in old configuration.\n");
 			res = sync_checkpoints_iterate ();
 
@@ -3595,7 +3587,7 @@
 
 	case SYNC_STATE_REFCOUNT:
 		done_queueing = 1;
-		if (my_lowest_nodeid == totempg_my_nodeid_get()) {
+		if (my_should_sync) {
 			TRACE1 ("transmit refcounts because this processor is the lowest member in old configuration.\n");
 			res = sync_refcounts_iterate ();
 		}

revision-1506.patch:

--- NEW FILE revision-1506.patch ---
Index: exec/ckpt.c
===================================================================
--- exec/ckpt.c	(revision 1505)
+++ exec/ckpt.c	(revision 1506)
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2003-2006 MontaVista Software, Inc.
- * Copyright (c) 2006-2007 Red Hat, Inc.
+ * Copyright (c) 2006-2008 Red Hat, Inc.
  *
  * All rights reserved.
  *
@@ -373,9 +373,9 @@
 
 static enum iteration_state my_iteration_state;
 
-static struct list_head *my_iteration_state_checkpoint;
+static struct list_head *my_iteration_state_checkpoint_list;
 
-static struct list_head *my_iteration_state_section;
+static struct list_head *my_iteration_state_section_list;
 
 static unsigned int my_old_member_list[PROCESSOR_COUNT_MAX];
 
@@ -759,48 +759,6 @@
 /*
  * Implementation
  */
-
-void clean_checkpoint_list(struct list_head *head)
-{
-	struct list_head *checkpoint_list;
-	struct checkpoint *checkpoint;
-
-	if (list_empty(head)) {
-		log_printf (LOG_LEVEL_DEBUG, "clean_checkpoint_list: List is empty \n");
-		return;
-	}
-
-	checkpoint_list = head->next;
-        while (checkpoint_list != head) {
-		checkpoint = list_entry (checkpoint_list,
-                                struct checkpoint, list);
-                assert (checkpoint > 0);
-
-		/*
-		* If checkpoint has been unlinked and this is the last reference, delete it
-		*/
-		 if (checkpoint->unlinked && checkpoint->reference_count == 0) {
-			log_printf (LOG_LEVEL_DEBUG,"clean_checkpoint_list: deallocating checkpoint %s.\n",
-                                                                                                checkpoint->name.value);
-			checkpoint_list = checkpoint_list->next;
-			checkpoint_release (checkpoint);
-			continue;
-
-		}
-		else if (checkpoint->reference_count == 0) {
-			log_printf (LOG_LEVEL_DEBUG, "clean_checkpoint_list: Starting timer to release checkpoint %s.\n",
-				checkpoint->name.value);
-			openais_timer_delete (checkpoint->retention_timer);
-			openais_timer_add_duration (
-				checkpoint->checkpoint_creation_attributes.retention_duration,
-				checkpoint,
-				timer_function_retention,
-				&checkpoint->retention_timer);
-		}
-		checkpoint_list = checkpoint_list->next;
-        }
-}
-
 static void ckpt_confchg_fn (
 	enum totem_configuration_type configuration_type,
 	unsigned int *member_list, int member_list_entries,
@@ -3369,11 +3327,11 @@
 
 	my_sync_state = SYNC_STATE_CHECKPOINT;
 	my_iteration_state = ITERATION_STATE_CHECKPOINT;
-	my_iteration_state_checkpoint = checkpoint_list_head.next;
+	my_iteration_state_checkpoint_list = checkpoint_list_head.next;
 
 	checkpoint = list_entry (checkpoint_list_head.next, struct checkpoint,
 		list);
-	my_iteration_state_section = checkpoint->sections_list_head.next;
+	my_iteration_state_section_list = checkpoint->sections_list_head.next;
 
 	LEAVE();
 }
@@ -3381,6 +3339,8 @@
 static inline void sync_refcounts_enter (void)
 {
 	my_sync_state = SYNC_STATE_REFCOUNT;
+
+	my_iteration_state_checkpoint_list = checkpoint_list_head.next;
 }
 
 static void ckpt_sync_init (void)
@@ -3516,25 +3476,62 @@
 	struct list_head *section_list;
 	unsigned int res = 0;
 
-	for (checkpoint_list = checkpoint_list_head.next;
+	/*
+	 * iterate through all checkpoints or sections
+	 * from the last successfully transmitted checkpoint or sectoin
+	 */
+	for (checkpoint_list = my_iteration_state_checkpoint_list;
 		checkpoint_list != &checkpoint_list_head;
 		checkpoint_list = checkpoint_list->next) {
 
 		checkpoint = list_entry (checkpoint_list, struct checkpoint, list);
 
-		res = sync_checkpoint_transmit (checkpoint);
-		if (res != 0) {
-			break;
+		/*
+		 * Synchronize a checkpoint if there is room in the totem
+		 * buffers and we didn't previously synchronize a checkpoint
+		 */
+		if (my_iteration_state == ITERATION_STATE_CHECKPOINT) {
+			res = sync_checkpoint_transmit (checkpoint);
+			if (res != 0) {
+				/*
+				 * Couldn't sync this checkpoint keep processing
+				 */
+				return (-1);
+			}
+			my_iteration_state_section_list = checkpoint->sections_list_head.next;
+			my_iteration_state = ITERATION_STATE_SECTION;
 		}
-		for (section_list = checkpoint->sections_list_head.next;
+
+		/*
+		 * Synchronize a checkpoint section if there is room in the
+		 * totem buffers
+		 */
+		for (section_list = my_iteration_state_section_list;
 			section_list != &checkpoint->sections_list_head;
 			section_list = section_list->next) {
 
 			checkpoint_section = list_entry (section_list, struct checkpoint_section, list);
 			res = sync_checkpoint_section_transmit (checkpoint, checkpoint_section);
+			if (res != 0) {
+				/*
+				 * Couldn't sync this section keep processing
+				 */
+				return (-1);
+			}
+			my_iteration_state_section_list = section_list->next;
 		}
+
+		/*
+		 * Continue to iterating checkpoints
+		 */
+		my_iteration_state = ITERATION_STATE_CHECKPOINT;
+		my_iteration_state_checkpoint_list = checkpoint_list->next;
 	}
-	return (res);
+
+	/*
+	 * all checkpoints and sections iterated
+	 */
+	return (0);
 }
 
 unsigned int sync_refcounts_iterate (void)
@@ -3543,7 +3540,7 @@
 	struct list_head *list;
 	unsigned int res = 0;
 
-	for (list = checkpoint_list_head.next;
+	for (list = my_iteration_state_checkpoint_list;
 		list != &checkpoint_list_head;
 		list = list->next) {
 
@@ -3553,47 +3550,50 @@
 		if (res != 0) {
 			break;
 		}
+		my_iteration_state_checkpoint_list = list->next;
 	}
 	return (res);
 }
 
 static int ckpt_sync_process (void)
 {
-	unsigned int done_queueing = 1;
-	unsigned int continue_processing = 0;
+	unsigned int done_queueing;
+	unsigned int continue_processing;
 	unsigned int res;
 
 	ENTER();
 
+	continue_processing = 0;
+
 	switch (my_sync_state) {
 	case SYNC_STATE_CHECKPOINT:
+		done_queueing = 1;
+		continue_processing = 1;
+
 		if (my_should_sync) {
 			TRACE1 ("should transmit checkpoints because lowest member in old configuration.\n");
 			res = sync_checkpoints_iterate ();
 
-			if (res == 0) { 
-				done_queueing = 1;
+			/*
+			 * Not done iterating checkpoints
+			 */
+			if (res != 0) { 
+				done_queueing = 0;
 			}
 		}
 		if (done_queueing) {
 			sync_refcounts_enter ();
 		}
-
-		/*
-		 * TODO recover current iteration state
-		 */
-		continue_processing = 1;
 		break;
 
 	case SYNC_STATE_REFCOUNT:
-		done_queueing = 1;
 		if (my_should_sync) {
 			TRACE1 ("transmit refcounts because this processor is the lowest member in old configuration.\n");
 			res = sync_refcounts_iterate ();
+			if (res != 0) { 
+				continue_processing = 1;
+			}
 		}
-		if (done_queueing) {
-			continue_processing = 0;
-		}
 		break;
 	}
 

revision-1507.patch:

--- NEW FILE revision-1507.patch ---
Index: lib/ckpt.c
===================================================================
--- lib/ckpt.c	(revision 1506)
+++ lib/ckpt.c	(revision 1507)
@@ -200,8 +200,6 @@
 
 	saHandleDestroy (&ckptSectionIterationHandleDatabase,
 		ckptSectionIterationInstance->sectionIterationHandle);
-
-	pthread_mutex_destroy (&ckptSectionIterationInstance->response_mutex);
 }
 
 static void ckptCheckpointInstanceFinalize (struct ckptCheckpointInstance *ckptCheckpointInstance)
@@ -225,8 +223,6 @@
 	list_del (&ckptCheckpointInstance->list);
 
 	saHandleDestroy (&checkpointHandleDatabase, ckptCheckpointInstance->checkpointHandle);
-
-	pthread_mutex_destroy (&ckptCheckpointInstance->response_mutex);
 }
 
 static void ckptInstanceFinalize (struct ckptInstance *ckptInstance)

revision-1508.patch:

--- NEW FILE revision-1508.patch ---
Index: lib/clm.c
===================================================================
--- lib/clm.c	(revision 1507)
+++ lib/clm.c	(revision 1508)
@@ -498,10 +498,7 @@
 	clmInstance->finalize = 1;
 
 	pthread_mutex_unlock (&clmInstance->response_mutex);
-	pthread_mutex_destroy (&clmInstance->response_mutex);
 
-	pthread_mutex_destroy (&clmInstance->dispatch_mutex);
-
 	saHandleDestroy (&clmHandleDatabase, clmHandle);
 
 	if (clmInstance->response_fd != -1) {

revision-1509.patch:

--- NEW FILE revision-1509.patch ---
Index: lib/cpg.c
===================================================================
--- lib/cpg.c	(revision 1508)
+++ lib/cpg.c	(revision 1509)
@@ -1,7 +1,7 @@
 /*
  * vi: set autoindent tabstop=4 shiftwidth=4 :
  *
- * Copyright (c) 2006-2007 Red Hat, Inc.
+ * Copyright (c) 2006-2008 Red Hat, Inc.
  *
  * All rights reserved.
  *
@@ -156,10 +156,7 @@
 	cpg_inst->finalize = 1;
 
 	pthread_mutex_unlock (&cpg_inst->response_mutex);
-	pthread_mutex_destroy (&cpg_inst->response_mutex);
 
-	pthread_mutex_destroy (&cpg_inst->dispatch_mutex);
-
 	saHandleDestroy (&cpg_handle_t_db, handle);
 
 	/*

revision-1510.patch:

--- NEW FILE revision-1510.patch ---
Index: lib/evs.c
===================================================================
--- lib/evs.c	(revision 1509)
+++ lib/evs.c	(revision 1510)
@@ -166,10 +166,7 @@
 	evs_inst->finalize = 1;
 
 	pthread_mutex_unlock (&evs_inst->response_mutex);
-	pthread_mutex_destroy (&evs_inst->response_mutex);
 
-	pthread_mutex_destroy (&evs_inst->dispatch_mutex);
-
 	saHandleDestroy (&evs_handle_t_db, handle);
     /*
      * Disconnect from the server

revision-1511.patch:

--- NEW FILE revision-1511.patch ---
Index: lib/evt.c
===================================================================
--- lib/evt.c	(revision 1510)
+++ lib/evt.c	(revision 1511)
@@ -904,10 +904,7 @@
 	evti->ei_finalize = 1;
 
 	pthread_mutex_unlock (&evti->ei_response_mutex);
- 	pthread_mutex_destroy (&evti->ei_response_mutex);
 
- 	pthread_mutex_destroy (&evti->ei_dispatch_mutex);
-
 	saHandleDestroy(&evt_instance_handle_db, evtHandle);
 	/*
 	 * Disconnect from the server

revision-1512.patch:

--- NEW FILE revision-1512.patch ---
Index: exec/sync.c
===================================================================
--- exec/sync.c	(revision 1511)
+++ exec/sync.c	(revision 1512)
@@ -429,6 +429,7 @@
 			sizeof (barrier_data_confchg));
 
 		sync_callbacks_load();
+log_printf (LOG_LEVEL_NOTICE, "sync_callbacks_load\n");
 
 		/*
 		 * if sync service found, execute it
@@ -457,6 +458,7 @@
 	}
 	if (sync_processing && sync_callbacks.sync_abort != NULL) {
 		sync_callbacks.sync_abort ();
+		sync_callbacks.sync_activate = NULL;
 	}
 	/*
 	 * If no virtual synchrony filter configured, then start

revision-1513.patch:

--- NEW FILE revision-1513.patch ---
Index: lib/util.c
===================================================================
--- lib/util.c	(revision 1512)
+++ lib/util.c	(revision 1513)
@@ -543,7 +543,7 @@
 		handleDatabase->handleCount += 1;
 		newHandles = (struct saHandle *)realloc (handleDatabase->handles,
 			sizeof (struct saHandle) * handleDatabase->handleCount);
-		if (newHandles == 0) {
+		if (newHandles == NULL) {
 			pthread_mutex_unlock (&handleDatabase->mutex);
 			return (SA_AIS_ERR_NO_MEMORY);
 		}

revision-1514.patch:

--- NEW FILE revision-1514.patch ---
Index: exec/sync.c
===================================================================
--- exec/sync.c	(revision 1513)
+++ exec/sync.c	(revision 1514)
@@ -429,7 +429,6 @@
 			sizeof (barrier_data_confchg));
 
 		sync_callbacks_load();
-log_printf (LOG_LEVEL_NOTICE, "sync_callbacks_load\n");
 
 		/*
 		 * if sync service found, execute it

revision-1521.patch:

--- NEW FILE revision-1521.patch ---
Index: exec/ipc.c
===================================================================
--- exec/ipc.c	(revision 1514)
+++ exec/ipc.c	(revision 1521)
@@ -31,6 +31,9 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE 1
+#endif
 #include <pthread.h>
 #include <assert.h>
 #include <pwd.h>

revision-1524.patch:

--- NEW FILE revision-1524.patch ---
Index: exec/keygen.c
===================================================================
--- exec/keygen.c	(revision 1521)
+++ exec/keygen.c	(revision 1524)
@@ -73,7 +73,7 @@
 	/*
 	 * Open key
 	 */
-	authkey_fd = open ("/etc/ais/authkey", O_CREAT|O_WRONLY);
+	authkey_fd = open ("/etc/ais/authkey", O_CREAT|O_WRONLY, 600);
 	if (authkey_fd == -1) {
 		perror ("Could not create /etc/ais/authkey");
 		exit (1);
@@ -81,7 +81,7 @@
 	/*
 	 * Set security of authorization key to uid = 0 uid = 0 mode = 0400
 	 */
-	fchown (authkey_fd, 0, 0);
+	res = fchown (authkey_fd, 0, 0);
 	fchmod (authkey_fd, 0400);
 
 	printf ("Writing openais key to /etc/ais/authkey.\n");

revision-1546.patch:

--- NEW FILE revision-1546.patch ---
Index: exec/ipc.c
===================================================================
--- exec/ipc.c	(revision 1524)
+++ exec/ipc.c	(revision 1546)
@@ -56,7 +56,7 @@
 #include <signal.h>
 #include <sched.h>
 #include <time.h>
-#if defined(OPENAIS_SOLARIS) && defined(HAVE_GETPEERUCRED)
+#if defined(HAVE_GETPEERUCRED)
 #include <ucred.h>
 #endif
 
@@ -923,37 +923,43 @@
 		msg_recv.msg_control = (void *)cmsg_cred;
 		msg_recv.msg_controllen = sizeof (cmsg_cred);
 #else
-		euid = -1; egid = -1;
-		if (getpeereid(conn_io->fd, &euid, &egid) != -1 &&
-		    (euid == 0 || egid == g_gid_valid)) {
-				conn_io->state = CONN_IO_STATE_AUTHENTICATED;
+		{
+			uid_t euid;
+			gid_t egid;
+			                
+			euid = -1; egid = -1;
+			if (getpeereid(conn_io->fd, &euid, &egid) != -1 &&
+			    (euid == 0 || egid == g_gid_valid)) {
+					conn_io->state = CONN_IO_STATE_AUTHENTICATED;
+			}
+			if (conn_io->state == CONN_IO_STATE_INITIALIZING) {
+				log_printf (LOG_LEVEL_SECURITY, "Connection not authenticated because gid is %d, expecting %d\n", egid, g_gid_valid);
+			}
 		}
-		if (conn_io->state == CONN_IO_STATE_INITIALIZING) {
-			log_printf (LOG_LEVEL_SECURITY, "Connection not authenticated because gid is %d, expecting %d\n", egid, g_gid_valid);
-		}
 #endif
 	}
 
-	#else /* OPENAIS_SOLARIS */
+#else /* OPENAIS_SOLARIS */
 	msg_recv.msg_accrights = 0;
 	msg_recv.msg_accrightslen = 0;
 
 
 	if (! conn_info->authenticated) {
-	#ifdef HAVE_GETPEERUCRED
-	ucred_t *uc;
-	uid_t euid = -1;
-	gid_t egid = -1;
-	if (getpeerucred(conn_info->fd, &uc) == 0) {
-	euid = ucred_geteuid(uc);
-	egid = ucred_getegid(uc);
-	if ((euid == 0) || (egid == g_gid_valid)) {
-		conn_info->authenticated = 1;
-	}
-		ucred_free(uc);
-	}
-	if (conn_info->authenticated == 0) {
-		log_printf (LOG_LEVEL_SECURITY, "Connection not authenticated because gid is %d, expecting %d\n", (int)egid, g_gid_valid);
+#ifdef HAVE_GETPEERUCRED
+		ucred_t *uc;
+		uid_t euid = -1;
+		gid_t egid = -1;
+
+		if (getpeerucred (conn_info->fd, &uc) == 0) {
+			euid = ucred_geteuid (uc);
+			egid = ucred_getegid (uc);
+			if ((euid == 0) || (egid == g_gid_valid)) {
+				conn_info->authenticated = 1;
+			}
+			ucred_free(uc);
+		}
+		if (conn_info->authenticated == 0) {
+			log_printf (LOG_LEVEL_SECURITY, "Connection not authenticated because gid is %d, expecting %d\n", (int)egid, g_gid_valid);
  		}
  #else
  		log_printf (LOG_LEVEL_SECURITY, "Connection not authenticated "
@@ -983,7 +989,7 @@
 		/* On many OS poll never return POLLHUP or POLLERR.
 		 * EOF is detected when recvmsg return 0.
 		 */
-  		libais_disconnect_request (conn_info);
+		disconnect_request (conn_io);
 #endif
 		return;
 	}

revision-1548.patch:

--- NEW FILE revision-1548.patch ---
Index: exec/ckpt.c
===================================================================
--- exec/ckpt.c	(revision 1546)
+++ exec/ckpt.c	(revision 1548)
@@ -65,6 +65,8 @@
 #include "totempg.h"
 #include "print.h"
 
+#define GLOBALID_CHECKPOINT_NAME "global_checkpoint_name_do_not_use_in_an_application"
+
 #define CKPT_MAX_SECTION_DATA_SEND (1024*400)
 
 enum ckpt_message_req_types {
@@ -92,6 +94,7 @@
 };
 
 enum sync_state {
+	SYNC_STATE_GLOBALID,
 	SYNC_STATE_CHECKPOINT,
 	SYNC_STATE_REFCOUNT
 };
@@ -768,6 +771,7 @@
 {
 	unsigned int i, j;
 	unsigned int lowest_nodeid;
+	static int first_configuration = 1;
 
 	my_should_sync = 0;
 
@@ -792,9 +796,12 @@
 			sizeof (unsigned int) * member_list_entries);
 		my_old_member_list_entries = member_list_entries;
 
-		if (lowest_nodeid == totempg_my_nodeid_get()) {
+		if ((first_configuration) ||
+			(lowest_nodeid == totempg_my_nodeid_get())) {
+
 			my_should_sync = 1;
 		}
+		first_configuration = 0;
 	}
 }
 
@@ -3319,14 +3326,14 @@
 	list_init (ckpt_list_head);
 }
 
-static inline void sync_checkpoints_enter (void)
+static inline void sync_gloalid_enter (void)
 {
 	struct checkpoint *checkpoint;
 
 	ENTER();
 
-	my_sync_state = SYNC_STATE_CHECKPOINT;
-	my_iteration_state = ITERATION_STATE_CHECKPOINT;
+	my_sync_state = SYNC_STATE_GLOBALID;
+
 	my_iteration_state_checkpoint_list = checkpoint_list_head.next;
 
 	checkpoint = list_entry (checkpoint_list_head.next, struct checkpoint,
@@ -3336,6 +3343,16 @@
 	LEAVE();
 }
 
+static inline void sync_checkpoints_enter (void)
+{
+	ENTER();
+
+	my_sync_state = SYNC_STATE_CHECKPOINT;
+	my_iteration_state = ITERATION_STATE_CHECKPOINT;
+
+	LEAVE();
+}
+
 static inline void sync_refcounts_enter (void)
 {
 	my_sync_state = SYNC_STATE_REFCOUNT;
@@ -3347,7 +3364,7 @@
 {
 	ENTER();
 
-	sync_checkpoints_enter();
+	sync_gloalid_enter();
 
 	LEAVE();
 }
@@ -3387,6 +3404,19 @@
 	return (totempg_groups_mcast_joined (openais_group_handle, &iovec, 1, TOTEMPG_AGREED));
 }
 
+static int sync_checkpoint_globalid_transmit (void)
+{
+	struct checkpoint checkpoint;
+
+	strcpy ((char *)checkpoint.name.value, GLOBALID_CHECKPOINT_NAME);
+
+	checkpoint.name.length = strlen (GLOBALID_CHECKPOINT_NAME);
+	checkpoint.ckpt_id = global_ckpt_id;
+
+	return (sync_checkpoint_transmit(&checkpoint));
+}
+
+
 static int sync_checkpoint_section_transmit (
 	struct checkpoint *checkpoint,
 	struct checkpoint_section *checkpoint_section)
@@ -3566,6 +3596,20 @@
 	continue_processing = 0;
 
 	switch (my_sync_state) {
+        case SYNC_STATE_GLOBALID:
+		done_queueing = 1;
+		continue_processing = 1;
+		if (my_should_sync) {
+			res = sync_checkpoint_globalid_transmit ();
+			if (res != 0) {
+				done_queueing = 0;
+			}
+		}
+		if (done_queueing) {
+			sync_checkpoints_enter ();
+		}
+		break;
+
 	case SYNC_STATE_CHECKPOINT:
 		done_queueing = 1;
 		continue_processing = 1;
@@ -3643,6 +3687,22 @@
 		return;
 	}
 
+	/*
+	 * Discard checkpoints that are used to synchronize the global_ckpt_id
+	 * also setting the global ckpt_id as well.
+	 */
+	if (memcmp (&req_exec_ckpt_sync_checkpoint->checkpoint_name.value, 
+		GLOBALID_CHECKPOINT_NAME,
+		req_exec_ckpt_sync_checkpoint->checkpoint_name.length) == 0) {
+
+		if (req_exec_ckpt_sync_checkpoint->ckpt_id >= global_ckpt_id) {
+			global_ckpt_id = req_exec_ckpt_sync_checkpoint->ckpt_id + 1;
+		}
+
+		LEAVE();
+		return;
+	}
+
 	checkpoint = checkpoint_find_specific (
 		&sync_checkpoint_list_head,
 		&req_exec_ckpt_sync_checkpoint->checkpoint_name,


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/openais/F-9/.cvsignore,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- .cvsignore	16 Aug 2006 04:45:44 -0000	1.7
+++ .cvsignore	29 May 2008 21:29:02 -0000	1.8
@@ -1 +1 @@
-openais-0.80.1.tar.gz
+openais-0.80.3.tar.gz


Index: openais.spec
===================================================================
RCS file: /cvs/pkgs/rpms/openais/F-9/openais.spec,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- openais.spec	29 Feb 2008 19:50:42 -0000	1.22
+++ openais.spec	29 May 2008 21:29:02 -0000	1.23
@@ -1,30 +1,65 @@
 Name: openais
 Summary: The openais Standards-Based Cluster Framework executive and APIs
-Version: 0.80.1
-Release: 9
+Version: 0.80.3
+Release: 17%{?dist}
 License: BSD
 Group: System Environment/Base
 URL: http://developer.osdl.org/dev/openais/
 Source0: http://developer.osdl.org/dev/openais/downloads/openais-%{version}/openais-%{version}.tar.gz
 Patch0: openais-0.76-defaultconfig.patch
-Patch1: revision-1223.patch
-Patch2: revision-1230.patch
-Patch3: revision-1245.patch
-Patch4: revision-1246.patch
-Patch5: revision-1248.patch
-Patch6: revision-1252.patch
-Patch7: revision-1256.patch
-Patch8: revision-1257.patch
-Patch9: revision-1258.patch
-Patch10: revision-1260.patch
-Patch11: revision-1261.patch
-Patch12: revision-1262.patch
-Patch13: revision-1263.patch
-Patch14: revision-1264.patch
-Patch15: revision-1265.patch
-Patch16: openais-0.80.1-open-fix.patch
-Patch17: openais-0.80.1-gnusource.patch
+Patch1: revision-1406.patch
+Patch2: revision-1407.patch
+Patch3: revision-1408.patch
+Patch4: revision-1409.patch
+Patch5: revision-1410.patch
+Patch6: revision-1413.patch
+Patch7: revision-1414.patch
+Patch8: revision-1415.patch
+Patch9: revision-1416.patch
+Patch10: revision-1419.patch
+Patch11: revision-1423.patch
+Patch12: revision-1426.patch
+Patch13: revision-1446.patch
+Patch14: revision-1449.patch
+Patch15: revision-1450.patch
+Patch16: revision-1453.patch
+Patch17: revision-1455.patch
+Patch18: revision-1464.patch
+Patch19: revision-1465.patch
+Patch20: revision-1469.patch
+Patch21: revision-1471.patch
+Patch22: revision-1473.patch
+Patch23: revision-1477.patch
+Patch24: revision-1478.patch
+Patch25: revision-1479.patch
+Patch26: revision-1480.patch
+Patch27: revision-1486.patch
+Patch28: revision-1493.patch
+Patch29: revision-1496.patch
+Patch30: revision-1497.patch
+Patch31: revision-1498.patch
+Patch32: revision-1499.patch
+Patch33: revision-1500.patch
+Patch34: revision-1501.patch
+Patch35: revision-1502.patch
+Patch36: revision-1503.patch
+Patch37: revision-1504.patch
+Patch38: revision-1506.patch
+Patch39: revision-1507.patch
+Patch40: revision-1508.patch
+Patch41: revision-1509.patch
+Patch42: revision-1510.patch
+Patch43: revision-1511.patch
+Patch44: revision-1512.patch
+Patch45: revision-1513.patch
+Patch46: revision-1514.patch
+Patch47: revision-1521.patch
+Patch48: revision-1524.patch
+Patch49: revision-1546.patch
+Patch50: revision-1548.patch
+
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+ExclusiveArch: i386 ppc x86_64 ppc64 ia64 s390 s390x alpha
 Requires(pre): /usr/sbin/useradd
 Requires(post): /sbin/chkconfig
 Requires(preun): /sbin/chkconfig
@@ -48,7 +83,7 @@
 %setup -q -n openais-%{version}
 %patch0
 %patch1
-%patch2 
+%patch2
 %patch3
 %patch4
 %patch5
@@ -62,8 +97,41 @@
 %patch13
 %patch14
 %patch15
-%patch16 -p1
-%patch17 -p1
+%patch16
+%patch17
+%patch18
+%patch19
+%patch20
+%patch21
+%patch22
+%patch23
+%patch24
+%patch25
+%patch26
+%patch27
+%patch28
+%patch29
+%patch30
+%patch31
+%patch32
+%patch33
+%patch34
+%patch35
+%patch36
+%patch37
+%patch38
+%patch39
+%patch40
+%patch41
+%patch42
+%patch43
+%patch44
+%patch45
+%patch46
+%patch47
+%patch48
+%patch49
+%patch50
 
 %build
 # -O3 required for performance reasons
@@ -106,6 +174,7 @@
 
 %files 
 %defattr(-,root,root,-)
+%dir %{_docdir}/%{name}-%{version}
 %doc %{_docdir}/%{name}-%{version}/LICENSE
 %doc %{_docdir}/%{name}-%{version}/SECURITY
 %doc %{_docdir}/%{name}-%{version}/README.amf
@@ -178,6 +247,7 @@
 %{_includedir}/openais/service/print.h
 %{_includedir}/openais/service/swab.h
 %{_includedir}/openais/service/service.h
+%{_includedir}/openais/service/timer.h
 %{_mandir}/man3/cpg_dispatch.3*
 %{_mandir}/man3/cpg_fd_get.3*
 %{_mandir}/man3/cpg_finalize.3*
@@ -186,6 +256,9 @@
 %{_mandir}/man3/cpg_leave.3*
 %{_mandir}/man3/cpg_mcast_joined.3*
 %{_mandir}/man3/cpg_membership_get.3*
+%{_mandir}/man3/cpg_local_get.3*
+%{_mandir}/man3/cpg_context_get.3*
+%{_mandir}/man3/cpg_context_set.3*
 %{_mandir}/man3/evs_dispatch.3*
 %{_mandir}/man3/evs_fd_get.3*
 %{_mandir}/man3/evs_finalize.3*
@@ -197,15 +270,221 @@
 %{_mandir}/man3/evs_membership_get.3*
 
 %changelog
-* Fri Feb 29 2008 Tom "spot" Callaway <tcallawa at redhat.com> - 0.80.1-9
-- fix issue where struct ucred wasn't getting defined anymore
-
-* Fri Feb 29 2008 Tom "spot" Callaway <tcallawa at redhat.com> - 0.80.1-8
-- Drop list of ExclusiveArch, if something is broken, ExcludeArch it.
-- fix open glibc issue
+* Mon May 19 2008 Steven Dake <sdake at redhat.com> 0.80.3-17
+- Resolves: rhbz#400941
+- Wrong bugzilla id caused rejection during commit.
+
+* Mon May 19 2008 Steven Dake <sdake at redhat.com> 0.80.3-16
+- Resolves: rhbz#400491
+- Add upstream revision 1521 - Compile on latest glibc.
+- Add upstream revision 1524 - Fix syscall usage in keygen application.
+- Add upstream revision 1546 - Fix build for authentication on bsd platforms.
+- Add upstream revision 1548 - Fix synchronization of checkpoint global id.
+
+* Tue Apr 1 2008 Steven Dake <sdake at redhat.com> - 0.80.3-15
+- Resolves: rhbz#432531
+- Add upstream revision 1514 - Remove extra log_printf.
+- Add upstream revision 1513 - Remove comparison with zero and replace with comparison with NULL in handle database code.
+- Add upstream revision 1512 - Remove early commit of synchronization data when a synchronization in progress is followed by a node leaving or joining the cluster.
+- Add upstream revision 1511 - Remove double pthread_mutex_destroy from evt service.
+- Add upstream revision 1510 - Remove double pthread_mutex_destroy from evs service.
+- Add upstream revision 1509 - Remove double pthread_mutex_destroy from cpg service.
+- Add upstream revision 1508 - Remove double pthread_mutex_destroy from clm service.
+- Add upstream revision 1507 - Remove double pthread_mutex_destroy from checkpoint service.
+* Sat Mar 15 2008 Steven Dake <sdake at redhat.com> - 0.80.3-14
+- Resolves: rhbz#432531
+- Add upstream revision 1506 - Resolves incomplete checkpoing synchronization when totem queue is full.
+
+* Thu Mar 6 2008 Steven Dake <sdake at redhat.com> - 0.80.3-13
+- Resolves: rhbz#432531
+- Add upstream revision 1504 - Fixes checkpoint synchronization issue when a new node is started.
+- Add upstream revision 1503 - backport -f foreground option.
+- Add upstream revision 1502 - Revert revision 1477 which exhibits problems with cman.
+- Add revision 1477 - This was reverted in a previous version but cherrypicked.  Now the patch has been applied and reverted in the rpm build process to match upstream.
+
+
+* Tue Feb 26 2008 Steven Dake <sdake at redhat.com> - 0.80.3-12
+- Resolves: rhbz#433839
+- Fix problem with cvs not allowing new checkin requires new revision.
+
+* Fri Feb 22 2008 Steven Dake <sdake at redhat.com> - 0.80.3-11
+- Resolves: rhbz#429920
+- Add upstream revision 1500 - IPC locks up if a POLLERR is returned in certain circumstances.
+- Resolves: rhbz#433839
+- Add upstream revision 1501 - A mcast is delivered before a join in some circumstances.
+* Fri Jan 18 2008 Steven Dake <sdake at redhat.com> - 0.80.3-10
+- Resolves: rhbz#249287
+- Remove upstream revision 1477 - Exhibits problem with revolver tester
+
+* Tue Jan 15 2008 Steven Dake <sdake at redhat.com> - 0.80.3-9
+- Resolves: rhbz#249287
+- Add upstream revision 1499 - ipc changes merged into tree
+
+* Tue Jan 15 2008 Steven Dake <sdake at redhat.com> - 0.80.3-8
+- Resolves: rhbz#249287
+- Add non-merged IPC changes for fixing operation with cluster mirror
+- Resolves: rhbz#403901
+- Add upstream revision 1498 - enhance openais_exit_error to report string instead of error code
+- Resolves: rhbz#309621
+- Add upstream revision 1497 - Follow LSB guidelines for initscript
+- Add upstream revision 1496 - Revert patch 1480 since it causes problems with cman
+- Add upstream revision 1493 - Backport of patch 1379 to remove this_ip and replace with accessor functoins for use by ipc system
+- Add upstream revision 1486 - Unlock mutex on error condition of no memory when creating handle
+- Add upstream revision 1480 - Endian fixes for the totempg code
+- Add upstream revision 1479 - Remove & when regular reference works properly.
+- Add upstream revision 1478 - Patch to set system_from properly in retransmitted messages
+- Add upstream revision 1473 - Fix pthread_equal for timer_delete operation
+- Add upstream revision 1471 - Endian convert cpg downlist messages properly
+- Add upstream revision 1469 - change initialDataSize paramter from saUint32gt to SaSizeT to match specifications
+
+* Tue Oct 2 2007 Steven Dake <sdake at redhat.com> - 0.80.3-7
+- Resolves: rhbz#216954
+- Add upstream revision 1465 - remove fsync call that blocks protocol
+
+* Mon Sep 24 2007 Steven Dake <sdake at redhat.com> - 0.80.3-5
+- Resolves: rhbz#302341
+- Add upstream revision 1455 - Fix loss of node joins in commit state resulting in looping of membership protocol.
+- Add upstream revision 1453 - Fix assertion if component registration occurs during certain phases of instantation.
+- Add upstream revision 1450 - Fix reference counting in lcr code so that lcr_ifact_release works properly.
+- Add upstream revision 1449 - Allow missing services in synchronization to not cause a segfault.k
+- Add upstream revision 1446 - Remove inadvertant commit of changes to totemsrp which happened when security changes were patched in revision 1426.
+- Add upstream revision 1426 - Patch to log security warnings when invalid identifier is used in message header for a totem header.
+
+* Tue Aug 28 2007 Steven Dake <sdake at redhat.com> - 0.80.3-4
+- Resolves: rhbz#251082
+- Add upstream revision 1423 - Fix synchronization defect resulting in segfault.
+- This is the fc6 build.
+ 
+* Tue Aug 1 2007 Steven Dake <sdake at redhat.com> - 0.80.3-3
+- Resolves: rhbz#209862
+- Resolves: rhbz#249506
+- Resolves: rhbz#249509
+- Resolves: rhbz#247733
+
+* Tue Aug 1 2007 Steven Dake <sdake at redhat.com> - 0.80.3-2
+- Resolves: rhbz#209862
+- Add upstream revision 1406 - Filter commit token when it is retransmitted.
+- Resolves: rhbz#249506
+- Add upstream revision 1407 - Reset consensus array on entering operational mode.
+- Resolves: rhbz#249509
+- Add upstream revision 1408 - Store the ring id information properly when it changes.
+- Resolves: rhbz#247733
+- Add upstream revision 1409 - Add subtractor to availability of message entries for the totem message queue
+- This is the rhel5 version of 0.80.3-0 with some upstream patches.
+
+* Tue Jun 26 2007 Steven Dake <sdake at redhat.com> - 0.80.3-1
+- Resolves: rhbz#243119
+- Resolves: rhbz#221190
+- Resolves: rhbz#224190
+- Resolves: rhbz#233892
+- Resolves: rhbz#236549
+- New upstream version including all previous revisions.
+- This is the fc6 version of 0.80.3-1.
+
+* Tue Jun 26 2007 Steven Dake <sdake at redhat.com> - 0.80.3-0
+- Resolves: rhbz#243119
+- Resolves: rhbz#221190
+- Resolves: rhbz#224190
+- Resolves: rhbz#233892
+- Resolves: rhbz#236549
+- New upstream version including all previous revisions.
+- This is the rhel5 version of 0.80.3-0.
+
+* Mon Dec 18 2006 Steven Dake <sdake at redhat.com> - 0.80.2-1
+- Resolves: rhbz#211357
+- This is the rhel5 version of 0.80.2-0.
+
+* Mon Dec 18 2006 Steven Dake <sdake at redhat.com> - 0.80.2-0
+- Resolves: rhbz#211357
+- New upstream version including all prevision revisions.
+- Fixes cpg ordering problem.
+- Fixes ia64 unaligned problem.
+- This is the fc6 version.
+
+* Tue Dec 5 2006 Steven Dake <sdake at redhat.com> - 0.80.1-22
+- Resolves: rhbz#216492
+- This is the rhel5 version of 0.80.1-21.
+
+* Tue Dec 5 2006 Steven Dake <sdake at redhat.com> - 0.80.1-21
+- Resolves: rhbz#216492
+- Add upstream revision 1319 - Increase outbound buffer size to 5000 messages.
+- Add upstream revision 1316 - Improvements on segfault logging.
+- This is the fc6 version.
+
+* Wed Nov 29 2006 Steven Dake <sdake at redhat.com> - 0.80.1-20
+- Resolves: rhbz#216492
+- Need new res line to commit.  This is the same as 0.80.1-18.
+
+* Wed Nov 29 2006 Steven Dake <sdake at redhat.com> - 0.80.1-19
+- This is the rhel5 version of 0.80.1-18.
+
+* Wed Nov 29 2006 Steven Dake <sdake at redhat.com> - 0.80.1-18
+- Add upstream revision 1315 - Fix compile error in libcpg.
+- Add upstream revision 1314 - Change rundir to /var/openais.
+- Add upstream revision 1313 - Flow control fixes for the CPG service.
+- Add upstream revision 1312 - Correct usage of ERR_LIBRARY to SA_AIS_ERR_LIBRARY.
+- Add upstream revision 1311 - handle case where POLLHUP and POLLERR are not uspported by OS.
+- Add upstream revision 1309 - set default downcheck value to 1000ms.
+- Add upstream revision 1308 - Remove invalid code and warnings detected by Intel compiler.
+- This is the fc6 version.
+
+* Tue Nov 14 2006 Steven Dake <sdake at redhat.com> - 0.80.1-17
+- This is the rhel5 version of 0.80.1-16.
+
+* Tue Nov 14 2006 Steven Dake <sdake at redhat.com> - 0.80.1-16
+- Add upstream revision 1307 - Remove flow control compile warning.
+- Add upstream revision 1306 - Make clean now really makes clean.
+- Add upstream revision 1305 - Set scheduler SCHED_RR to max priority available
+  in system.
+- Add upstream revision 1300 - Improve behavior of flow control of CPG service
+  during configuration changes.
+- This is the fc6 version.
+
+* Thu Nov 9 2006 Steven Dake <sdake at redhat.com> - 0.80.1-15
+- This is the rhel5 version of 0.80.1-14
+
+* Thu Nov 9 2006 Steven Dake <sdake at redhat.com> - 0.80.1-14
+- Add upstream revision 1296 - Remove compile warnings.
+- Add upstream revision 1295 - The totem membership protocol was changed to
+- Add upstream revision 1294 - modify location of ringid file to
+- Add upstream revision 1293 - flush output of debug messages on exit or segv.
+  /var/run/openais and chdir here so cores are saved there.
+  match specifications.
+- This is the fc6 version.
+
+* Fri Nov 3 2006 Steven Dake <sdake at redhat.com> - 0.80.1-13
+- Add upstream revision 1286 - Fix checkpoint unlink operation under certain
+  conditions.  This is the rhel5 version.
+
+* Fri Nov 3 2006 Steven Dake <sdake at redhat.com> - 0.80.1-12
+- Add upstream revision 1286 - Fix checkpoint unlink operation under certain
+  conditions.  This is the fc6 version.
+
+* Tue Oct 24 2006 Steven Dake <sdake at redhat.com> - 0.80.1-11
+- Add upstream revision 1284 - Initialize variables for checkpoint sync.
+
+* Tue Oct 24 2006 Steven Dake <sdake at redhat.com> - 0.80.1-10
+- Add %{?dist} to release field.
+
+* Tue Oct 24 2006 Steven Dake <sdake at redhat.com> - 0.80.1-9
+- Add upstream revision 1270 - Resolve IPC segfault.
+- Add upstream revision 1271 - Fix errors in ia64 alignment.
+- Add upstream revision 1275 - pthread_mutex_destroy cleanup patch.
+- Add upstream revision 1276 - Remove debug from makefile committed in revision 1275.
+- Add upstream revision 1277 - Formatting changes.
+- Add upstream revision 1278 - Patch testckpt to use proper seciton id size.
+- Add upstream revision 1279 - Call abort in sync service when processing is interrupted.
+- Add upstream revision 1282 - New generation checkpoint state machine.
+- Add upstream revision 1283 - Fix memory leaks.
+
+* Wed Oct 18 2006 Steven Dake <sdake at redhat.com> - 0.80.1-8
+- Add upstream revision 1268 - Align data in totem delivery on 4 byte
+  boundaries for ia64.
+- Add upstream revision 1269 - Increase default stack size for IPC connections
+  on ia64.
 
-* Tue Feb 19 2008 Fedora Release Engineering <rel-eng at fedoraproject.org> - 0.80.1-7
-- Autorebuild for GCC 4.3
+* Mon Oct 16 2006 Steven Dake <sdake at redhat.com> - 0.80.1-7
+- Add upstream revision 1267 - rework of checkpoint synchronization.
 
 * Thu Oct 12 2006 Steven Dake <sdake at redhat.com> - 0.80.1-6
 - Add upstream revision 1260 - Allocate the retransmission token in


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/openais/F-9/sources,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- sources	16 Aug 2006 04:45:44 -0000	1.7
+++ sources	29 May 2008 21:29:02 -0000	1.8
@@ -1 +1 @@
-7414d683d51cb00c46456125c7e1b2b0  openais-0.80.1.tar.gz
+05ac1e10abd31f500641ff48ecf4238f  openais-0.80.3.tar.gz


--- openais-0.80.1-gnusource.patch DELETED ---


--- openais-0.80.1-open-fix.patch DELETED ---


--- revision-1223.patch DELETED ---


--- revision-1230.patch DELETED ---


--- revision-1245.patch DELETED ---


--- revision-1246.patch DELETED ---


--- revision-1248.patch DELETED ---


--- revision-1252.patch DELETED ---


--- revision-1256.patch DELETED ---


--- revision-1257.patch DELETED ---


--- revision-1258.patch DELETED ---


--- revision-1260.patch DELETED ---


--- revision-1261.patch DELETED ---


--- revision-1262.patch DELETED ---


--- revision-1263.patch DELETED ---


--- revision-1264.patch DELETED ---


--- revision-1265.patch DELETED ---




More information about the fedora-extras-commits mailing list