Skip to content

Commit

Permalink
net:when work_cancel_sync is excuted,it releases net_lock
Browse files Browse the repository at this point in the history
the modification is to solve the deadlock caused by work cancel not releasing netlock

Signed-off-by: wangchen <[email protected]>
  • Loading branch information
wangchen61698 committed Oct 12, 2024
1 parent 225ed6c commit 8a7e812
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions net/igmp/igmp_group.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@

#include "devif/devif.h"
#include "igmp/igmp.h"
#include "utils/utils.h"

#ifdef CONFIG_NET_IGMP

Expand Down Expand Up @@ -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 */
Expand All @@ -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 */

Expand Down

0 comments on commit 8a7e812

Please sign in to comment.