diff options
author | Ian Moffett <ian@osmora.org> | 2025-07-31 15:52:41 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-07-31 15:55:33 -0400 |
commit | 740e59ea20f4ebfa80c889966daf6f7ed07c70fb (patch) | |
tree | 25faaf43fe46ab803c185dbc077b510f4b3bdce1 | |
parent | 54d528e4630ef43945bf63cdcda1c566dd5bbfea (diff) |
kernel: socket: Block if cmsg queue is empty
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r-- | sys/kern/kern_socket.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sys/kern/kern_socket.c b/sys/kern/kern_socket.c index 42f31d9..065245b 100644 --- a/sys/kern/kern_socket.c +++ b/sys/kern/kern_socket.c @@ -32,6 +32,7 @@ #include <sys/systm.h> #include <sys/proc.h> #include <sys/namei.h> +#include <sys/sched.h> #include <sys/errno.h> #include <sys/syslog.h> #include <sys/filedesc.h> @@ -477,6 +478,12 @@ recvmsg(int socket, struct msghdr *msg, int flags) clp = &ksock->cmsg_list; cmsg = TAILQ_FIRST(&clp->list); + /* Empty? */ + while (cmsg == NULL) { + sched_yield(); + cmsg = TAILQ_FIRST(&clp->list); + } + while (cmsg != NULL) { cmsghdr = &cmsg->hdr; |