From 46500b0de979b887e47499277c0ed29ebc8dcc70 Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Fri, 5 May 2023 11:06:02 -0400 Subject: [PATCH] fix: handle duplicate filter id removal --- waku/v2/protocol/legacy_filter/filter_map.go | 5 +++++ waku/v2/protocol/legacy_filter/waku_filter.go | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/waku/v2/protocol/legacy_filter/filter_map.go b/waku/v2/protocol/legacy_filter/filter_map.go index 62acb6c9..b254ab4a 100644 --- a/waku/v2/protocol/legacy_filter/filter_map.go +++ b/waku/v2/protocol/legacy_filter/filter_map.go @@ -49,6 +49,11 @@ func (fm *FilterMap) Delete(key string) { fm.Lock() defer fm.Unlock() + _, ok := fm.items[key] + if !ok { + return + } + close(fm.items[key].Chan) delete(fm.items, key) } diff --git a/waku/v2/protocol/legacy_filter/waku_filter.go b/waku/v2/protocol/legacy_filter/waku_filter.go index 67c707aa..1d70caa1 100644 --- a/waku/v2/protocol/legacy_filter/waku_filter.go +++ b/waku/v2/protocol/legacy_filter/waku_filter.go @@ -440,7 +440,7 @@ func (wf *WakuFilter) UnsubscribeFilterByID(ctx context.Context, filterID string // the contentTopics are removed the subscription is dropped completely func (wf *WakuFilter) UnsubscribeFilter(ctx context.Context, cf ContentFilter) error { // Remove local filter - var idsToRemove []string + idsToRemove := make(map[string]struct{}) for filterMapItem := range wf.filters.Items() { f := filterMapItem.Value id := filterMapItem.Key @@ -469,12 +469,12 @@ func (wf *WakuFilter) UnsubscribeFilter(ctx context.Context, cf ContentFilter) e } if len(f.ContentFilters) == 0 { - idsToRemove = append(idsToRemove, id) + idsToRemove[id] = struct{}{} } } } - for _, rId := range idsToRemove { + for rId := range idsToRemove { wf.filters.Delete(rId) }