summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-07-31 15:52:41 -0400
committerIan Moffett <ian@osmora.org>2025-07-31 15:55:33 -0400
commit740e59ea20f4ebfa80c889966daf6f7ed07c70fb (patch)
tree25faaf43fe46ab803c185dbc077b510f4b3bdce1
parent54d528e4630ef43945bf63cdcda1c566dd5bbfea (diff)
kernel: socket: Block if cmsg queue is empty
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r--sys/kern/kern_socket.c7
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;