You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2023/01/17 18:11:24 UTC

[nuttx] 02/04: rpmsg_socket: rpmsg_send_nocpy() should lock with rpmsg_destroy_ept

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

commit d6cad21a17c6decb76fa60254081dd4c10c43f85
Author: ligd <li...@xiaomi.com>
AuthorDate: Fri Jan 6 22:24:42 2023 +0800

    rpmsg_socket: rpmsg_send_nocpy() should lock with rpmsg_destroy_ept
    
    Signed-off-by: ligd <li...@xiaomi.com>
---
 net/rpmsg/rpmsg_sockif.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/net/rpmsg/rpmsg_sockif.c b/net/rpmsg/rpmsg_sockif.c
index 93d85657bb..66a274a2bf 100644
--- a/net/rpmsg/rpmsg_sockif.c
+++ b/net/rpmsg/rpmsg_sockif.c
@@ -375,6 +375,7 @@ static inline void rpmsg_socket_destroy_ept(
     }
 
   nxmutex_lock(&conn->recvlock);
+  nxmutex_lock(&conn->sendlock);
 
   if (conn->ept.rdev)
     {
@@ -391,6 +392,7 @@ static inline void rpmsg_socket_destroy_ept(
       rpmsg_socket_poll_notify(conn, POLLIN | POLLOUT);
     }
 
+  nxmutex_unlock(&conn->sendlock);
   nxmutex_unlock(&conn->recvlock);
 }
 
@@ -1004,10 +1006,10 @@ static ssize_t rpmsg_socket_send_continuous(FAR struct socket *psock,
       conn->lastpos  = conn->recvpos;
       conn->sendpos += msg->len;
 
-      nxmutex_unlock(&conn->sendlock);
 
       ret = rpmsg_sendto_nocopy(&conn->ept, msg, block + sizeof(*msg),
                                 conn->ept.dest_addr);
+      nxmutex_unlock(&conn->sendlock);
       if (ret < 0)
         {
           rpmsg_release_tx_buffer(&conn->ept, msg);
@@ -1107,9 +1109,9 @@ static ssize_t rpmsg_socket_send_single(FAR struct socket *psock,
   conn->lastpos  = conn->recvpos;
   conn->sendpos += len + sizeof(uint32_t);
 
-  nxmutex_unlock(&conn->sendlock);
 
   ret = rpmsg_sendto_nocopy(&conn->ept, msg, total, conn->ept.dest_addr);
+  nxmutex_unlock(&conn->sendlock);
   if (ret < 0)
     {
       rpmsg_release_tx_buffer(&conn->ept, msg);