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 2021/08/20 05:25:53 UTC
[incubator-nuttx] 02/04: net/rpmsg: move the sync handshark to
ns_bind callback
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/incubator-nuttx.git
commit afef9c2044f39e9f0f56528593c138bf1022f90a
Author: chao.an <an...@xiaomi.com>
AuthorDate: Mon Aug 16 17:19:18 2021 +0800
net/rpmsg: move the sync handshark to ns_bind callback
Signed-off-by: chao.an <an...@xiaomi.com>
---
net/rpmsg/rpmsg_sockif.c | 63 ++++++++++++++++++++++--------------------------
1 file changed, 29 insertions(+), 34 deletions(-)
diff --git a/net/rpmsg/rpmsg_sockif.c b/net/rpmsg/rpmsg_sockif.c
index fab5334..f2672a2 100644
--- a/net/rpmsg/rpmsg_sockif.c
+++ b/net/rpmsg/rpmsg_sockif.c
@@ -275,31 +275,6 @@ static int rpmsg_socket_wakeup(FAR struct rpmsg_socket_conn_s *conn)
return ret;
}
-static int rpmsg_socket_sync(FAR struct rpmsg_socket_conn_s *conn,
- unsigned int timeout)
-{
- struct rpmsg_socket_sync_s msg;
- int ret;
-
- msg.cmd = RPMSG_SOCKET_CMD_SYNC;
- msg.size = circbuf_size(&conn->recvbuf);
-
- ret = rpmsg_send(&conn->ept, &msg, sizeof(msg));
- if (ret < 0)
- {
- return ret;
- }
-
- ret = OK;
-
- if (conn->sendsize == 0)
- {
- ret = net_timedwait(&conn->sendsem, timeout);
- }
-
- return ret;
-}
-
static inline uint32_t rpmsg_socket_get_space(
FAR struct rpmsg_socket_conn_s *conn)
{
@@ -454,6 +429,19 @@ static void rpmsg_socket_device_destroy(FAR struct rpmsg_device *rdev,
}
}
+static void rpmsg_socket_device_connect(FAR struct rpmsg_device *rdev,
+ FAR void *priv, FAR const char *name,
+ uint32_t dest)
+{
+ FAR struct rpmsg_socket_conn_s *conn = priv;
+ struct rpmsg_socket_sync_s msg;
+
+ msg.cmd = RPMSG_SOCKET_CMD_SYNC;
+ msg.size = circbuf_size(&conn->recvbuf);
+
+ rpmsg_send(&conn->ept, &msg, sizeof(msg));
+}
+
static void rpmsg_socket_ns_bind(FAR struct rpmsg_device *rdev,
FAR void *priv, FAR const char *name,
uint32_t dest)
@@ -640,7 +628,6 @@ static int rpmsg_socket_listen(FAR struct socket *psock, int backlog)
static int rpmsg_socket_connect_internal(FAR struct socket *psock)
{
FAR struct rpmsg_socket_conn_s *conn = psock->s_conn;
- unsigned int tc;
int ret;
ret = circbuf_resize(&conn->recvbuf, CONFIG_NET_RPMSG_RXBUF_SIZE);
@@ -652,20 +639,24 @@ static int rpmsg_socket_connect_internal(FAR struct socket *psock)
ret = rpmsg_register_callback(conn,
rpmsg_socket_device_created,
rpmsg_socket_device_destroy,
- NULL);
+ rpmsg_socket_device_connect);
if (ret < 0)
{
return ret;
}
- ret = rpmsg_socket_sync(conn, _SO_TIMEOUT(psock->s_rcvtimeo));
+ if (conn->sendsize == 0)
+ {
+ ret = net_timedwait(&conn->sendsem,
+ _SO_TIMEOUT(psock->s_rcvtimeo));
+ }
if (ret < 0)
{
rpmsg_unregister_callback(conn,
rpmsg_socket_device_created,
rpmsg_socket_device_destroy,
- NULL);
+ rpmsg_socket_device_connect);
}
return ret;
@@ -728,12 +719,15 @@ static int rpmsg_socket_accept(FAR struct socket *psock,
if (conn)
{
- rpmsg_socket_sync(conn, _SO_TIMEOUT(psock->s_rcvtimeo));
-
rpmsg_register_callback(conn,
rpmsg_socket_device_created,
rpmsg_socket_device_destroy,
- NULL);
+ rpmsg_socket_device_connect);
+
+ if (conn->sendsize == 0)
+ {
+ net_lockedwait(&conn->sendsem);
+ }
newsock->s_domain = psock->s_domain;
newsock->s_sockif = psock->s_sockif;
@@ -1189,7 +1183,8 @@ static ssize_t rpmsg_socket_recvmsg(FAR struct socket *psock,
rpmsg_socket_unlock(&conn->recvlock);
- ret = net_timedwait(&conn->recvsem, _SO_TIMEOUT(psock->s_rcvtimeo));
+ ret = net_timedwait(&conn->recvsem,
+ _SO_TIMEOUT(psock->s_rcvtimeo));
if (!conn->ept.rdev)
{
ret = -ECONNRESET;
@@ -1240,7 +1235,7 @@ static int rpmsg_socket_close(FAR struct socket *psock)
rpmsg_unregister_callback(conn,
rpmsg_socket_device_created,
rpmsg_socket_device_destroy,
- NULL);
+ rpmsg_socket_device_connect);
}
rpmsg_socket_destroy_ept(conn);