rpmsg_socket: fix rpmsg_socket_device_destroy() multi-access

Reason:
When user call rpmsg_socket_close() at the same time
rpmsg_socket_ns_unbind() is called by remote CPU,
then will meet multi-access to rpmsg_socket_device_destroy()

Fix:
reuse recvlock to handle this

Change-Id: I8f33658f19c56a4000382ff9355ff052c45afea0
Signed-off-by: ligd <liguiding1@xiaomi.com>
This commit is contained in:
ligd 2021-03-17 14:34:22 +08:00 committed by Xiang Xiao
parent 3a22af5d9b
commit b83b974e92

View File

@ -386,7 +386,14 @@ static int rpmsg_socket_ept_cb(FAR struct rpmsg_endpoint *ept,
static inline void rpmsg_socket_destroy_ept(
FAR struct rpmsg_socket_conn_s *conn)
{
if (conn && conn->ept.rdev)
if (!conn)
{
return;
}
rpmsg_socket_lock(&conn->recvlock);
if (conn->ept.rdev)
{
if (conn->backlog)
{
@ -400,6 +407,8 @@ static inline void rpmsg_socket_destroy_ept(
rpmsg_socket_post(&conn->recvsem);
rpmsg_socket_pollnotify(conn, POLLIN | POLLOUT);
}
rpmsg_socket_unlock(&conn->recvlock);
}
static void rpmsg_socket_ns_unbind(FAR struct rpmsg_endpoint *ept)