rpmsg_sockif: add recvlock for conn->sendsize in connect

conn->sendsize is used in rpmsg_socket_ept_cb() and
rpmsg_socket_connect_internal(), the connected event may be missed
as stated below:

1. in rpmsg_socket_connect_internal(), judge conn->sendsize == 0
   and prepare to wait sendsem;
2. interrupt by rptun thread, rpmsg_socket_ept_cb() is called to
   update conn->sendsize and post the sendsem, but the no one wait
   rx sem yet, so not post (see rpmsg_socket_post());
3. return to rpmsg_socket_connect_internal() to wait the sendsem, but
   has miss the connected event.

So add recvlock in rpmsg_socket_connect_internal() also.

Signed-off-by: Bowen Wang <wangbowen6@xiaomi.com>
This commit is contained in:
Bowen Wang 2023-08-28 14:09:09 +08:00 committed by Xiang Xiao
parent 03265caa7a
commit 49dbe7e177

View File

@ -717,8 +717,10 @@ static int rpmsg_socket_connect_internal(FAR struct socket *psock)
return ret;
}
nxmutex_lock(&conn->recvlock);
if (conn->sendsize == 0)
{
nxmutex_unlock(&conn->recvlock);
if (_SS_ISNONBLOCK(conn->sconn.s_flags))
{
return -EINPROGRESS;
@ -736,6 +738,10 @@ static int rpmsg_socket_connect_internal(FAR struct socket *psock)
NULL);
}
}
else
{
nxmutex_unlock(&conn->recvlock);
}
return ret;
}