|
|
@@ -508,6 +508,8 @@ struct totemsrp_instance {
|
|
|
|
|
|
uint32_t orf_token_discard;
|
|
|
|
|
|
+ uint32_t originated_orf_token;
|
|
|
+
|
|
|
uint32_t threaded_mode_enabled;
|
|
|
|
|
|
uint32_t waiting_trans_ack;
|
|
|
@@ -731,6 +733,8 @@ static void totemsrp_instance_initialize (struct totemsrp_instance *instance)
|
|
|
|
|
|
instance->orf_token_discard = 0;
|
|
|
|
|
|
+ instance->originated_orf_token = 0;
|
|
|
+
|
|
|
instance->commit_token = (struct memb_commit_token *)instance->commit_token_storage;
|
|
|
|
|
|
instance->my_id.no_addrs = INTERFACE_MAX;
|
|
|
@@ -1834,6 +1838,8 @@ static void memb_state_operational_enter (struct totemsrp_instance *instance)
|
|
|
char left_node_msg[1024];
|
|
|
char joined_node_msg[1024];
|
|
|
|
|
|
+ instance->originated_orf_token = 0;
|
|
|
+
|
|
|
memb_consensus_reset (instance);
|
|
|
|
|
|
old_ring_state_reset (instance);
|
|
|
@@ -2045,6 +2051,8 @@ static void memb_state_gather_enter (
|
|
|
{
|
|
|
instance->orf_token_discard = 1;
|
|
|
|
|
|
+ instance->originated_orf_token = 0;
|
|
|
+
|
|
|
memb_set_merge (
|
|
|
&instance->my_id, 1,
|
|
|
instance->my_proc_list, &instance->my_proc_list_entries);
|
|
|
@@ -4510,6 +4518,14 @@ static int message_handler_memb_commit_token (
|
|
|
|
|
|
case MEMB_STATE_RECOVERY:
|
|
|
if (totemip_equal (&instance->my_id.addr[0], &instance->my_ring_id.rep)) {
|
|
|
+
|
|
|
+ /* Filter out duplicated tokens */
|
|
|
+ if (instance->originated_orf_token) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ instance->originated_orf_token = 1;
|
|
|
+
|
|
|
log_printf (instance->totemsrp_log_level_debug,
|
|
|
"Sending initial ORF token");
|
|
|
|