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 <[email protected]> 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 <[email protected]> --- 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) {
