This is an automated email from the ASF dual-hosted git repository.
acassis 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 1c65d71488c usrsock_rpmsg_server.c: replace net_lock with conn_lock
1c65d71488c is described below
commit 1c65d71488cc35af33e9f036809d9793b2a8c6de
Author: zhanghongyu <[email protected]>
AuthorDate: Mon Nov 17 19:08:09 2025 +0800
usrsock_rpmsg_server.c: replace net_lock with conn_lock
Protect usrsock_rpmsg_server resources through conn_lock, avoid lack
of protection for usrsock_rpmsg_server after net_lock modification.
Signed-off-by: zhanghongyu <[email protected]>
---
drivers/usrsock/usrsock_rpmsg_server.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/drivers/usrsock/usrsock_rpmsg_server.c
b/drivers/usrsock/usrsock_rpmsg_server.c
index c85bf7293d5..23b09f00789 100644
--- a/drivers/usrsock/usrsock_rpmsg_server.c
+++ b/drivers/usrsock/usrsock_rpmsg_server.c
@@ -594,19 +594,20 @@ static int usrsock_rpmsg_recvfrom_handler(FAR struct
rpmsg_endpoint *ept,
if (ret > 0 && (priv->socks[req->usockid].s_type & SOCK_TYPE_MASK) ==
SOCK_STREAM)
{
+ FAR struct socket_conn_s *conn = priv->socks[req->usockid].s_conn;
if (outaddrlen < inaddrlen)
{
memcpy((FAR void *)(ack + 1) + outaddrlen,
(FAR void *)(ack + 1) + inaddrlen, ret);
}
- /* Hold net_lock to combine get_tx_payload and recvfrom together.
- * Otherwise we may keep holding tx buffer when waiting net_lock in
- * recvfrom, which may block rpmsg and may cause dead lock if
- * another thread tries to get tx buffer with net_lock held.
+ /* Hold conn_lock to combine get_tx_payload and recvfrom together.
+ * Otherwise we may keep holding tx buffer when waiting conn_lock
+ * in recvfrom, which may block rpmsg and may cause dead lock if
+ * another thread tries to get tx buffer with conn_lock held.
*/
- net_lock();
+ nxrmutex_lock(&conn->s_lock);
while (totlen < buflen &&
i < CONFIG_NET_USRSOCK_RPMSG_SERVER_NIOVEC)
{
@@ -662,7 +663,7 @@ static int usrsock_rpmsg_recvfrom_handler(FAR struct
rpmsg_endpoint *ept,
events |= USRSOCK_EVENT_RECVFROM_AVAIL;
}
- net_unlock();
+ nxrmutex_unlock(&conn->s_lock);
}
}
@@ -1168,6 +1169,7 @@ static void usrsock_rpmsg_poll_setup(FAR struct pollfd
*pfds,
{
FAR struct usrsock_rpmsg_s *priv = (FAR struct usrsock_rpmsg_s *)pfds->arg;
FAR struct socket *psock = &priv->socks[pfds->fd];
+ FAR struct socket_conn_s *conn = psock->s_conn;
int ret = 0;
/* No poll for SOCK_CTRL. */
@@ -1177,7 +1179,7 @@ static void usrsock_rpmsg_poll_setup(FAR struct pollfd
*pfds,
return;
}
- net_lock();
+ nxrmutex_lock(&conn->s_lock);
if (events)
{
@@ -1212,7 +1214,7 @@ static void usrsock_rpmsg_poll_setup(FAR struct pollfd
*pfds,
pfds->events, pfds->revents);
}
- net_unlock();
+ nxrmutex_unlock(&conn->s_lock);
}
static void usrsock_rpmsg_poll_cb(FAR struct pollfd *pfds)