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/09/08 14:39:09 UTC
[nuttx] 01/02: driver/sensors: using list_for_every_entry_safe to fix race condition
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 f8052cdc76cb6523660c67ece5552ad1589c9a5d
Author: dongjiuzhu1 <do...@xiaomi.com>
AuthorDate: Fri Sep 1 22:09:39 2023 +0800
driver/sensors: using list_for_every_entry_safe to fix race condition
Signed-off-by: dongjiuzhu1 <do...@xiaomi.com>
---
drivers/sensors/sensor_rpmsg.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/drivers/sensors/sensor_rpmsg.c b/drivers/sensors/sensor_rpmsg.c
index 661f0ba5c8..bb2efff8a0 100644
--- a/drivers/sensors/sensor_rpmsg.c
+++ b/drivers/sensors/sensor_rpmsg.c
@@ -349,6 +349,7 @@ static int sensor_rpmsg_ioctl(FAR struct sensor_rpmsg_dev_s *dev,
{
struct sensor_rpmsg_ioctl_cookie_s cookie;
FAR struct sensor_rpmsg_proxy_s *proxy;
+ FAR struct sensor_rpmsg_proxy_s *ptmp;
FAR struct sensor_rpmsg_ioctl_s *msg;
uint32_t space;
int ret = -ENOTTY;
@@ -365,8 +366,8 @@ static int sensor_rpmsg_ioctl(FAR struct sensor_rpmsg_dev_s *dev,
*/
sensor_rpmsg_lock(dev);
- list_for_every_entry(&dev->proxylist, proxy,
- struct sensor_rpmsg_proxy_s, node)
+ list_for_every_entry_safe(&dev->proxylist, proxy, ptmp,
+ struct sensor_rpmsg_proxy_s, node)
{
msg = rpmsg_get_tx_payload_buffer(proxy->ept, &space, true);
if (!msg)
@@ -840,6 +841,7 @@ static ssize_t sensor_rpmsg_push_event(FAR void *priv, FAR const void *data,
{
FAR struct sensor_rpmsg_dev_s *dev = priv;
FAR struct sensor_rpmsg_stub_s *stub;
+ FAR struct sensor_rpmsg_stub_s *stmp;
ssize_t ret;
/* Push new data to upperhalf driver's circular buffer */
@@ -855,8 +857,8 @@ static ssize_t sensor_rpmsg_push_event(FAR void *priv, FAR const void *data,
*/
sensor_rpmsg_lock(dev);
- list_for_every_entry(&dev->stublist, stub,
- struct sensor_rpmsg_stub_s, node)
+ list_for_every_entry_safe(&dev->stublist, stub, stmp,
+ struct sensor_rpmsg_stub_s, node)
{
sensor_rpmsg_push_event_one(dev, stub);
}
@@ -1097,6 +1099,7 @@ static int sensor_rpmsg_ioctl_handler(FAR struct rpmsg_endpoint *ept,
{
FAR struct sensor_rpmsg_ioctl_s *msg = data;
FAR struct sensor_rpmsg_stub_s *stub;
+ FAR struct sensor_rpmsg_stub_s *stmp;
FAR struct sensor_rpmsg_dev_s *dev;
unsigned long arg;
int ret;
@@ -1105,8 +1108,8 @@ static int sensor_rpmsg_ioctl_handler(FAR struct rpmsg_endpoint *ept,
msg->arg;
dev = (FAR struct sensor_rpmsg_dev_s *)(uintptr_t)msg->proxy;
sensor_rpmsg_lock(dev);
- list_for_every_entry(&dev->stublist, stub,
- struct sensor_rpmsg_stub_s, node)
+ list_for_every_entry_safe(&dev->stublist, stub, stmp,
+ struct sensor_rpmsg_stub_s, node)
{
if (stub->ept == ept)
{