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)

Reply via email to