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:
parent
03265caa7a
commit
49dbe7e177
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user