1
0
Fork 0
forked from nuttx/nuttx-update

net:when work_cancel_sync is excuted,it releases net_lock

the modification is to solve the deadlock caused by work cancel not releasing netlock

Signed-off-by: wangchen <wangchen41@xiaomi.com>
This commit is contained in:
wangchen 2024-09-26 15:05:17 +08:00 committed by Xiang Xiao
parent b791e27a8d
commit be17bf2f86

View file

@ -67,6 +67,7 @@
#include "devif/devif.h"
#include "igmp/igmp.h"
#include "utils/utils.h"
#ifdef CONFIG_NET_IGMP
@ -212,6 +213,9 @@ FAR struct igmp_group_s *igmp_grpallocfind(FAR struct net_driver_s *dev,
void igmp_grpfree(FAR struct net_driver_s *dev,
FAR struct igmp_group_s *group)
{
unsigned int count;
int blresult;
grpinfo("Free: %p flags: %02x\n", group, group->flags);
/* Cancel the wdog */
@ -220,7 +224,12 @@ void igmp_grpfree(FAR struct net_driver_s *dev,
/* Cancel the workqueue */
blresult = net_breaklock(&count);
work_cancel_sync(LPWORK, &group->work);
if (blresult >= 0)
{
net_restorelock(count);
}
/* Remove the group structure from the group list in the device structure */