[PATCH 1/4] connection: Fix sendmsg() on FreeBSD
Karsten Otto
karsten.otto at posteo.de
Thu Sep 11 12:40:34 PDT 2014
From: Philip Withnall <philip at tecnocode.co.uk>
Date: Fri, 15 Feb 2013 12:56:16 +0000
It expects ((msg_controllen == 0) == (msg_control == NULL)), and returns
EINVAL otherwise. It can't hurt to be tidy about things on other platforms
either though.
See: http://www.freebsd.org/cgi/query-pr.cgi?pr=docs/99356#reply2
Signed-off-by: Philip Withnall <philip at tecnocode.co.uk>
Signed-off-by: Karsten Otto <ottoka at posteo.de>
---
src/connection.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/connection.c b/src/connection.c
index f292853..c4eb354 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -287,10 +287,19 @@ wl_connection_flush(struct wl_connection *connection)
msg.msg_namelen = 0;
msg.msg_iov = iov;
msg.msg_iovlen = count;
- msg.msg_control = cmsg;
- msg.msg_controllen = clen;
+ msg.msg_control = NULL;
+ msg.msg_controllen = 0;
msg.msg_flags = 0;
+ /* FreeBSD requires msg_control to be set to NULL iff
+ * msg_controllen is 0 (see
+ * http://www.freebsd.org/cgi/query-pr.cgi?pr=docs/99356#reply2)
+ * Can't hurt to do that on all platforms. */
+ if (clen > 0) {
+ msg.msg_controllen = clen;
+ msg.msg_control = cmsg;
+ }
+
do {
len = sendmsg(connection->fd, &msg,
MSG_NOSIGNAL | MSG_DONTWAIT);
--
1.9.1
More information about the wayland-devel
mailing list