From 8e7d559283bdef339af8af83f28fe129e5249a73 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Thu, 4 Mar 2021 15:36:40 -0700 Subject: [PATCH] sock/posix: When a socket has no recv_pipe, reading should still clear from pending_recv list If the upper layer performs a read/recv, it should still remove the socket from the pending_recv list. Change-Id: I32ca8ecccbfe1e53ecc7d6f57343c2727e84b851 Signed-off-by: Ben Walker Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6743 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto --- module/sock/posix/posix.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/module/sock/posix/posix.c b/module/sock/posix/posix.c index 4fd385175..28831b80b 100644 --- a/module/sock/posix/posix.c +++ b/module/sock/posix/posix.c @@ -923,10 +923,15 @@ static ssize_t posix_sock_readv(struct spdk_sock *_sock, struct iovec *iov, int iovcnt) { struct spdk_posix_sock *sock = __posix_sock(_sock); + struct spdk_posix_sock_group_impl *group = __posix_group_impl(sock->base.group_impl); int rc, i; size_t len; if (sock->recv_pipe == NULL) { + if (group && sock->pending_recv) { + sock->pending_recv = false; + TAILQ_REMOVE(&group->pending_recv, sock, link); + } return readv(sock->fd, iov, iovcnt); }