From 023e266651e77b2be1bc532c3cee3f3921dcec72 Mon Sep 17 00:00:00 2001 From: Jordan Yates Date: Wed, 4 Dec 2024 20:32:20 +1000 Subject: [PATCH] net: nsos_sockets: notify pollers on socket close Raise the poll signal when the socket is being closed to prevent users of `zsock_poll` blocking after the socket is no more. Signed-off-by: Jordan Yates --- drivers/net/nsos_sockets.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/net/nsos_sockets.c b/drivers/net/nsos_sockets.c index 6a1cc763739..7aa4e3cb924 100644 --- a/drivers/net/nsos_sockets.c +++ b/drivers/net/nsos_sockets.c @@ -258,6 +258,7 @@ static ssize_t nsos_write(void *obj, const void *buf, size_t sz) static int nsos_close(void *obj) { struct nsos_socket *sock = obj; + struct nsos_socket_poll *poll; int ret; ret = nsi_host_close(sock->poll.mid.fd); @@ -265,6 +266,13 @@ static int nsos_close(void *obj) errno = nsos_adapt_get_zephyr_errno(); } + SYS_DLIST_FOR_EACH_CONTAINER(&nsos_polls, poll, node) { + if (poll == &sock->poll) { + poll->mid.revents = ZSOCK_POLLHUP; + poll->mid.cb(&poll->mid); + } + } + k_free(sock); return ret;