Răsfoiți Sursa

Change RecvQueue to use a stack structure for receiving the
response instead of passing in the maximum sized value for a
response message.

(Logical change 1.48)


git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@151 fd59a12c-fef9-0310-b244-a6a79926bd2f

Steven Dake 21 ani în urmă
părinte
comite
26a054685d
1 a modificat fișierele cu 13 adăugiri și 8 ștergeri
  1. 13 8
      lib/util.c

+ 13 - 8
lib/util.c

@@ -162,7 +162,7 @@ retry_recv:
 
 struct message_overlay {
 	struct message_header header;
-	char instance[4096];
+	char payload[4096];
 };
 
 SaErrorT
@@ -172,31 +172,34 @@ saRecvQueue (
 	struct queue *queue,
 	int findMessageId)
 {
-	struct message_overlay *message_overlay = (struct message_overlay *)msg;
+	struct message_overlay message;
 	void *inq_msg;
 	int match;
 	SaErrorT error;
 
 	do {
-		error = saRecvRetry (s, &message_overlay->header, sizeof (struct message_header), MSG_WAITALL | MSG_NOSIGNAL);
+		error = saRecvRetry (s, &message.header, sizeof (struct message_header),
+			MSG_WAITALL | MSG_NOSIGNAL);
 		if (error != SA_OK) {
 			goto error_exit;
 		}
-		if (message_overlay->header.size > sizeof (struct message_header)) {
-			error = saRecvRetry (s, &message_overlay->instance, message_overlay->header.size - sizeof (struct message_header), MSG_WAITALL | MSG_NOSIGNAL);
+		if (message.header.size > sizeof (struct message_header)) {
+			error = saRecvRetry (s, &message.payload,
+				message.header.size - sizeof (struct message_header),
+				MSG_WAITALL | MSG_NOSIGNAL);
 			if (error != SA_OK) {
 				goto error_exit;
 			}
 		}
-		match = (message_overlay->header.id == findMessageId);
+		match = (message.header.id == findMessageId);
 
 		if (match == 0 && queue) {
-			inq_msg = (void *)malloc (message_overlay->header.size);
+			inq_msg = (void *)malloc (message.header.size);
 			if (inq_msg == 0) {
 				error = SA_ERR_NO_MEMORY;
 				goto error_exit;
 			}
-			memcpy (inq_msg, msg, message_overlay->header.size);
+			memcpy (inq_msg, &message, message.header.size);
 			error = saQueueItemAdd (queue, &inq_msg);
 			if (error != SA_OK) {
 				free (inq_msg);
@@ -207,6 +210,8 @@ saRecvQueue (
 			if (error != SA_OK) {
 				goto error_exit;
 			}
+		} else {
+			memcpy (msg, &message, message.header.size);
 		}
 	} while (match == 0);