瀏覽代碼

bug 1115. Fixes the synchronization algorithm which was skipping services.

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@938 fd59a12c-fef9-0310-b244-a6a79926bd2f
Muni Bajpai 20 年之前
父節點
當前提交
cbaa6601d2
共有 1 個文件被更改,包括 9 次插入1 次删除
  1. 9 1
      exec/sync.c

+ 9 - 1
exec/sync.c

@@ -73,6 +73,8 @@ static struct sync_callbacks sync_callbacks;
 
 static int sync_processing = 0;
 
+static int sync_callback_loaded = 0;
+
 static void (*sync_synchronization_completed) (void);
 
 static int sync_recovery_index = 0;
@@ -198,6 +200,7 @@ void sync_callbacks_load (void)
 		}
 		sync_recovery_index += 1;
 		if (sync_callbacks.sync_init != NULL) {
+			sync_callback_loaded = 1;
 			break;
 		}
 	}
@@ -231,6 +234,9 @@ static int sync_service_process (enum totem_callback_token_type type, void *data
 	if (sync_processing && sync_callbacks.sync_init) {
 		sync_start_init (ring_id);
 	}
+	else {
+		sync_callback_loaded = 0;
+	}
 	return (0);
 }
 
@@ -358,7 +364,9 @@ void sync_deliver_fn (
 		memcpy (barrier_data_process, barrier_data_confchg,
 			sizeof (barrier_data_confchg));
 
-		sync_callbacks_load();
+		if ( sync_callback_loaded != 0 ) {
+			sync_callbacks_load();
+		}
 
 		/*
 		 * if sync service found, execute it