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:22 UTC
[nuttx] branch master updated (bc30b294aa -> 1b333bfad5)
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
from bc30b294aa mm:add heap args to mm_malloc_size
new c0735f06f6 rpmsg_socket: release tx buffer when send_oncopy failed
new d6cad21a17 rpmsg_socket: rpmsg_send_nocpy() should lock with rpmsg_destroy_ept
new a7dea8ddf6 rpmsg_socket: shouldn't call create_device again after create_ept
new 1b333bfad5 rpmsg_socket: destroy_ept only at close
The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
net/rpmsg/rpmsg_sockif.c | 58 ++++++++++++++++++++++++++++++++++++------------
1 file changed, 44 insertions(+), 14 deletions(-)
[nuttx] 03/04: rpmsg_socket: shouldn't call create_device again after create_ept
Posted by xi...@apache.org.
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 a7dea8ddf6441ebddd83da5ced71e129a4a26e4e
Author: ligd <li...@xiaomi.com>
AuthorDate: Fri Jan 6 22:27:03 2023 +0800
rpmsg_socket: shouldn't call create_device again after create_ept
Signed-off-by: ligd <li...@xiaomi.com>
---
net/rpmsg/rpmsg_sockif.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/net/rpmsg/rpmsg_sockif.c b/net/rpmsg/rpmsg_sockif.c
index 66a274a2bf..e674795bc8 100644
--- a/net/rpmsg/rpmsg_sockif.c
+++ b/net/rpmsg/rpmsg_sockif.c
@@ -107,6 +107,7 @@ struct rpmsg_socket_conn_s
/* server listen-scoket listening: backlog > 0;
* server listen-scoket closed: backlog = -1;
+ * accept scoket: backlog = -2;
* others: backlog = 0;
*/
@@ -756,8 +757,9 @@ static int rpmsg_socket_accept(FAR struct socket *psock,
if (conn)
{
+ conn->backlog = -2;
rpmsg_register_callback(conn,
- rpmsg_socket_device_created,
+ NULL,
rpmsg_socket_device_destroy,
NULL,
NULL);
@@ -1278,7 +1280,15 @@ static int rpmsg_socket_close(FAR struct socket *psock)
return 0;
}
- if (conn->backlog)
+ if (conn->backlog == -2)
+ {
+ rpmsg_unregister_callback(conn,
+ NULL,
+ rpmsg_socket_device_destroy,
+ NULL,
+ NULL);
+ }
+ else if (conn->backlog)
{
rpmsg_unregister_callback(conn,
NULL,
[nuttx] 04/04: rpmsg_socket: destroy_ept only at close
Posted by xi...@apache.org.
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 1b333bfad5f282c8eeceeee44555284f7056ed6b
Author: ligd <li...@xiaomi.com>
AuthorDate: Tue Jan 10 17:19:01 2023 +0800
rpmsg_socket: destroy_ept only at close
Signed-off-by: ligd <li...@xiaomi.com>
---
net/rpmsg/rpmsg_sockif.c | 33 +++++++++++++++++++++++----------
1 file changed, 23 insertions(+), 10 deletions(-)
diff --git a/net/rpmsg/rpmsg_sockif.c b/net/rpmsg/rpmsg_sockif.c
index e674795bc8..3852be3d2b 100644
--- a/net/rpmsg/rpmsg_sockif.c
+++ b/net/rpmsg/rpmsg_sockif.c
@@ -85,6 +85,7 @@ struct rpmsg_socket_conn_s
struct socket_conn_s sconn;
+ bool unbind;
struct rpmsg_endpoint ept;
struct sockaddr_rpmsg rpaddr;
@@ -247,7 +248,7 @@ static int rpmsg_socket_wakeup(FAR struct rpmsg_socket_conn_s *conn)
uint32_t space;
int ret = 0;
- if (!conn->ept.rdev)
+ if (!conn->ept.rdev || conn->unbind)
{
return ret;
}
@@ -410,7 +411,21 @@ static void rpmsg_socket_ns_bound(struct rpmsg_endpoint *ept)
static void rpmsg_socket_ns_unbind(FAR struct rpmsg_endpoint *ept)
{
- rpmsg_socket_destroy_ept(ept->priv);
+ FAR struct rpmsg_socket_conn_s *conn = ept->priv;
+
+ if (!conn)
+ {
+ return;
+ }
+
+ nxmutex_lock(&conn->recvlock);
+
+ conn->unbind = true;
+ rpmsg_socket_post(&conn->sendsem);
+ rpmsg_socket_post(&conn->recvsem);
+ rpmsg_socket_poll_notify(conn, POLLIN | POLLOUT);
+
+ nxmutex_unlock(&conn->recvlock);
}
static void rpmsg_socket_device_created(FAR struct rpmsg_device *rdev,
@@ -856,7 +871,7 @@ static int rpmsg_socket_poll(FAR struct socket *psock,
}
else if (_SS_ISCONNECTED(conn->sconn.s_flags))
{
- if (!conn->ept.rdev)
+ if (!conn->ept.rdev || conn->unbind)
{
eventset |= POLLHUP;
}
@@ -956,7 +971,7 @@ static ssize_t rpmsg_socket_send_continuous(FAR struct socket *psock,
{
ret = net_sem_timedwait(&conn->sendsem,
_SO_TIMEOUT(conn->sconn.s_sndtimeo));
- if (!conn->ept.rdev)
+ if (!conn->ept.rdev || conn->unbind)
{
ret = -ECONNRESET;
}
@@ -1008,7 +1023,6 @@ static ssize_t rpmsg_socket_send_continuous(FAR struct socket *psock,
conn->lastpos = conn->recvpos;
conn->sendpos += msg->len;
-
ret = rpmsg_sendto_nocopy(&conn->ept, msg, block + sizeof(*msg),
conn->ept.dest_addr);
nxmutex_unlock(&conn->sendlock);
@@ -1056,7 +1070,7 @@ static ssize_t rpmsg_socket_send_single(FAR struct socket *psock,
{
ret = net_sem_timedwait(&conn->sendsem,
_SO_TIMEOUT(conn->sconn.s_sndtimeo));
- if (!conn->ept.rdev)
+ if (!conn->ept.rdev || conn->unbind)
{
ret = -ECONNRESET;
}
@@ -1111,7 +1125,6 @@ static ssize_t rpmsg_socket_send_single(FAR struct socket *psock,
conn->lastpos = conn->recvpos;
conn->sendpos += len + sizeof(uint32_t);
-
ret = rpmsg_sendto_nocopy(&conn->ept, msg, total, conn->ept.dest_addr);
nxmutex_unlock(&conn->sendlock);
if (ret < 0)
@@ -1147,7 +1160,7 @@ static ssize_t rpmsg_socket_sendmsg(FAR struct socket *psock,
}
}
- if (!conn->ept.rdev)
+ if (!conn->ept.rdev || conn->unbind)
{
/* return ECONNRESET if lower IPC closed */
@@ -1221,7 +1234,7 @@ static ssize_t rpmsg_socket_recvmsg(FAR struct socket *psock,
goto out;
}
- if (!conn->ept.rdev)
+ if (!conn->ept.rdev || conn->unbind)
{
/* return EOF if lower IPC closed */
@@ -1242,7 +1255,7 @@ static ssize_t rpmsg_socket_recvmsg(FAR struct socket *psock,
ret = net_sem_timedwait(&conn->recvsem,
_SO_TIMEOUT(conn->sconn.s_rcvtimeo));
- if (!conn->ept.rdev)
+ if (!conn->ept.rdev || conn->unbind)
{
ret = -ECONNRESET;
}
[nuttx] 02/04: rpmsg_socket: rpmsg_send_nocpy() should lock with rpmsg_destroy_ept
Posted by xi...@apache.org.
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);
[nuttx] 01/04: rpmsg_socket: release tx buffer when send_oncopy failed
Posted by xi...@apache.org.
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 c0735f06f6381ee72fd55327e772aea6426edc90
Author: ligd <li...@xiaomi.com>
AuthorDate: Thu Jan 5 00:24:43 2023 +0800
rpmsg_socket: release tx buffer when send_oncopy failed
Signed-off-by: ligd <li...@xiaomi.com>
---
net/rpmsg/rpmsg_sockif.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/net/rpmsg/rpmsg_sockif.c b/net/rpmsg/rpmsg_sockif.c
index 9ad0711873..93d85657bb 100644
--- a/net/rpmsg/rpmsg_sockif.c
+++ b/net/rpmsg/rpmsg_sockif.c
@@ -1010,6 +1010,7 @@ static ssize_t rpmsg_socket_send_continuous(FAR struct socket *psock,
conn->ept.dest_addr);
if (ret < 0)
{
+ rpmsg_release_tx_buffer(&conn->ept, msg);
break;
}
@@ -1109,6 +1110,10 @@ static ssize_t rpmsg_socket_send_single(FAR struct socket *psock,
nxmutex_unlock(&conn->sendlock);
ret = rpmsg_sendto_nocopy(&conn->ept, msg, total, conn->ept.dest_addr);
+ if (ret < 0)
+ {
+ rpmsg_release_tx_buffer(&conn->ept, msg);
+ }
return ret > 0 ? len : ret;
}