Quellcode durchsuchen

Fix a crash in YKD

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2767 fd59a12c-fef9-0310-b244-a6a79926bd2f
Christine Caulfield vor 16 Jahren
Ursprung
Commit
e88c09e7c2
1 geänderte Dateien mit 9 neuen und 1 gelöschten Zeilen
  1. 9 1
      exec/vsf_ykd.c

+ 9 - 1
exec/vsf_ykd.c

@@ -193,7 +193,7 @@ static int ykd_attempt_send_msg (const void *context)
 	struct ykd_header header;
 	int res;
 
-	header.id = YKD_HEADER_SENDSTATE;
+	header.id = YKD_HEADER_ATTEMPT;
 
 	iovec.iov_base = (char *)&header;
 	iovec.iov_len = sizeof (struct ykd_header);
@@ -343,6 +343,7 @@ static void ykd_deliver_fn (
 	int all_received = 1;
 	int state_position = 0;
 	int i;
+	struct ykd_header *header = (struct ykd_header *)msg;
 	char *msg_state = (char *)msg + sizeof (struct ykd_header);
 
 	/*
@@ -390,6 +391,13 @@ static void ykd_deliver_fn (
 		}
 	}
 
+	/*
+	 * Ignore messages from a different state
+	 */
+	if ((ykd_mode == YKD_MODE_SENDSTATE && header->id == YKD_HEADER_ATTEMPT) ||
+	    (ykd_mode == YKD_MODE_ATTEMPT && header->id == YKD_HEADER_SENDSTATE))
+	  	return;
+
 	switch (ykd_mode) {
 		case YKD_MODE_SENDSTATE:
 			assert (msg_len > sizeof (struct ykd_header));