Sfoglia il codice sorgente

Merge trunk revision 2767:
r2767 | chrissie | 2010-04-20 00:27:14 -0700 (Tue, 20 Apr 2010) | 2 lines

Fix a crash in YKD



git-svn-id: http://svn.fedorahosted.org/svn/corosync/branches/flatiron@2782 fd59a12c-fef9-0310-b244-a6a79926bd2f

Steven Dake 16 anni fa
parent
commit
0ec3b3baa2
1 ha cambiato i file con 9 aggiunte e 1 eliminazioni
  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));