commit 60a3f60a92f53113d58d6509fc442df2c089a894
parent 0fe570ef4125755526135625ffd4f8f58aa70d64
Author: Joris Vink <joris@coders.se>
Date:   Mon, 27 Feb 2017 21:27:50 -0800
Allow MSG framework to pass 0 byte messages.
Diffstat:
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/src/msg.c b/src/msg.c
@@ -142,7 +142,9 @@ kore_msg_send(u_int16_t dst, u_int8_t id, const void *data, u_int32_t len)
 	m.src = worker->id;
 
 	net_send_queue(worker->msg[1], &m, sizeof(m));
-	net_send_queue(worker->msg[1], data, len);
+	if (data != NULL && len > 0)
+		net_send_queue(worker->msg[1], data, len);
+
 	net_send_flush(worker->msg[1]);
 }
 
@@ -151,8 +153,12 @@ msg_recv_packet(struct netbuf *nb)
 {
 	struct kore_msg		*msg = (struct kore_msg *)nb->buf;
 
-	net_recv_expand(nb->owner, msg->length, msg_recv_data);
-	return (KORE_RESULT_OK);
+	if (msg->length > 0) {
+		net_recv_expand(nb->owner, msg->length, msg_recv_data);
+		return (KORE_RESULT_OK);
+	}
+
+	return (msg_recv_data(nb));
 }
 
 static int
@@ -169,7 +175,10 @@ msg_recv_data(struct netbuf *nb)
 		if (worker != NULL && msg->dst != worker->id)
 			fatal("received message for incorrect worker");
 
-		type->cb(msg, nb->buf + sizeof(*msg));
+		if (msg->length > 0)
+			type->cb(msg, nb->buf + sizeof(*msg));
+		else
+			type->cb(msg, NULL);
 	}
 
 	if (worker == NULL && type == NULL) {