From 509324666cbd9f82d59ff60b5ff47f8b0f7bc1d8 Mon Sep 17 00:00:00 2001 From: Andrew Zaborowski Date: Thu, 7 Sep 2017 23:04:44 +0200 Subject: [PATCH] netdev: Reorder the registered check in netdev_frame_watch_add The l_queue_find() to find other watches matching the new prefix needs to be before the watchlist_link(), otherwise the prefix will match itself and "registered" is always true. --- src/netdev.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/netdev.c b/src/netdev.c index bd4c24dc..5ab2145f 100644 --- a/src/netdev.c +++ b/src/netdev.c @@ -3239,6 +3239,10 @@ uint32_t netdev_frame_watch_add(struct netdev *netdev, uint16_t frame_type, bool registered; uint32_t id; + registered = l_queue_find(netdev->frame_watches.items, + netdev_frame_watch_match_prefix, + &info); + fw = l_new(struct netdev_frame_watch, 1); fw->frame_type = frame_type; fw->prefix = l_memdup(prefix, prefix_len); @@ -3246,10 +3250,6 @@ uint32_t netdev_frame_watch_add(struct netdev *netdev, uint16_t frame_type, id = watchlist_link(&netdev->frame_watches, &fw->super, handler, user_data, NULL); - registered = l_queue_find(netdev->frame_watches.items, - netdev_frame_watch_match_prefix, - &info); - if (registered) return id;