This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new 36591af615 net/rpmsg: initialize semaphore count before wait
36591af615 is described below
commit 36591af61594a105b78af259a20a1b385c514c53
Author: chao an <[email protected]>
AuthorDate: Mon May 15 14:26:51 2023 +0800
net/rpmsg: initialize semaphore count before wait
recvmsg() will incorrectly return 0 if the count of sema before waiting is
greater than 0,
This commit will reinitialize the sema count before waiting:
1181 static ssize_t rpmsg_socket_recvmsg(FAR struct socket *psock,
1182 FAR struct msghdr *msg, int flags)
1183 {
...
1255 ret = net_sem_timedwait(&conn->recvsem,
1256 _SO_TIMEOUT(conn->sconn.s_rcvtimeo)); //
recvsem.sem_count == 1; return 0
...
1264 if (!conn->recvdata) // recvdata not consumed; goto else
1265 {
1266 ret = conn->recvlen;
1267 }
1268 else
1269 {
1270 conn->recvdata = NULL;
1271 }
...
1282 return ret; // BUGON! incorrectly return 0 to
user
1283 }
Signed-off-by: chao an <[email protected]>
---
net/rpmsg/rpmsg_sockif.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/rpmsg/rpmsg_sockif.c b/net/rpmsg/rpmsg_sockif.c
index da150f783b..5f54b52c04 100644
--- a/net/rpmsg/rpmsg_sockif.c
+++ b/net/rpmsg/rpmsg_sockif.c
@@ -342,7 +342,7 @@ static int rpmsg_socket_ept_cb(FAR struct rpmsg_endpoint
*ept,
}
conn->recvdata = NULL;
- nxsem_post(&conn->recvsem);
+ rpmsg_socket_post(&conn->recvsem);
}
if (len > 0)
@@ -1249,6 +1249,7 @@ static ssize_t rpmsg_socket_recvmsg(FAR struct socket
*psock,
conn->recvdata = buf;
conn->recvlen = len;
+ nxsem_reset(&conn->recvsem, 0);
nxmutex_unlock(&conn->recvlock);
ret = net_sem_timedwait(&conn->recvsem,