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) }