From 1896ac2d730d38b019c6bb77af8b39d335e9a584 Mon Sep 17 00:00:00 2001 From: Andrew Zaborowski Date: Fri, 7 Feb 2020 12:39:13 +0100 Subject: [PATCH] frame-xchg: Use both group_id and wdev_id when removing group In frame_watch_group_remove I forgot to actually match the group to be removed by both wdev_id and group_id. group_ids are unique only in the scope of one wdev. --- src/frame-xchg.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/frame-xchg.c b/src/frame-xchg.c index 78ee913b..d8f537f5 100644 --- a/src/frame-xchg.c +++ b/src/frame-xchg.c @@ -323,19 +323,24 @@ bool frame_watch_add(uint64_t wdev_id, uint32_t group_id, uint16_t frame_type, return true; } +struct watch_group_match_info { + uint64_t wdev_id; + uint32_t id; +}; + static bool frame_watch_group_match(const void *a, const void *b) { const struct watch_group *group = a; - uint32_t id = L_PTR_TO_UINT(b); + const struct watch_group_match_info *info = b; - return group->id == id; + return group->wdev_id == info->wdev_id && group->id == info->id; } bool frame_watch_group_remove(uint64_t wdev_id, uint32_t group_id) { + struct watch_group_match_info info = { wdev_id, group_id }; struct watch_group *group = l_queue_remove_if(watch_groups, - frame_watch_group_match, - L_UINT_TO_PTR(group_id)); + frame_watch_group_match, &info); if (!group) return false;