From bf04d35848e81e7d3d16e71f46f6c437e350b994 Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Thu, 22 Aug 2024 08:38:38 -0400 Subject: [PATCH 1/2] fix: criteriaInterest mutex --- waku/v2/api/missing/missing_messages.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/waku/v2/api/missing/missing_messages.go b/waku/v2/api/missing/missing_messages.go index 6de6e7600..129707ed1 100644 --- a/waku/v2/api/missing/missing_messages.go +++ b/waku/v2/api/missing/missing_messages.go @@ -37,7 +37,7 @@ type MissingMessageVerifier struct { messageTracker MessageTracker criteriaInterest map[string]criteriaInterest // Track message verification requests and when was the last time a pubsub topic was verified for missing messages - criteriaInterestMu sync.Mutex + criteriaInterestMu sync.RWMutex C <-chan *protocol.Envelope @@ -110,8 +110,10 @@ func (m *MissingMessageVerifier) Start(ctx context.Context) { select { case <-t.C: m.logger.Debug("checking for missing messages...") - m.criteriaInterestMu.Lock() - for _, interest := range m.criteriaInterest { + m.criteriaInterestMu.RLock() + critIntList := m.criteriaInterest + m.criteriaInterestMu.RUnlock() + for _, interest := range critIntList { select { case <-ctx.Done(): return @@ -123,7 +125,6 @@ func (m *MissingMessageVerifier) Start(ctx context.Context) { }(interest) } } - m.criteriaInterestMu.Unlock() case <-ctx.Done(): return @@ -155,8 +156,8 @@ func (m *MissingMessageVerifier) fetchHistory(c chan<- *protocol.Envelope, inter } m.criteriaInterestMu.Lock() - c := m.criteriaInterest[interest.contentFilter.PubsubTopic] - if c.equals(interest) { + c, ok := m.criteriaInterest[interest.contentFilter.PubsubTopic] + if ok && c.equals(interest) { c.lastChecked = now m.criteriaInterest[interest.contentFilter.PubsubTopic] = c } From b2ef3f1919501e14556bc69301ecc80723fd25ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?rich=CE=9Brd?= Date: Fri, 23 Aug 2024 10:28:46 -0400 Subject: [PATCH 2/2] Update waku/v2/api/missing/missing_messages.go Co-authored-by: Pablo Lopez --- waku/v2/api/missing/missing_messages.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/waku/v2/api/missing/missing_messages.go b/waku/v2/api/missing/missing_messages.go index 8ff75d1cf..bafde783b 100644 --- a/waku/v2/api/missing/missing_messages.go +++ b/waku/v2/api/missing/missing_messages.go @@ -111,7 +111,10 @@ func (m *MissingMessageVerifier) Start(ctx context.Context) { case <-t.C: m.logger.Debug("checking for missing messages...") m.criteriaInterestMu.RLock() - critIntList := m.criteriaInterest + critIntList := make([]criteriaInterest, 0, len(m.criteriaInterest)) + for _, value := range m.criteriaInterest { + critIntList = append(critIntList, value) + } m.criteriaInterestMu.RUnlock() for _, interest := range critIntList { select {