diff --git a/tests/v2/test_peer_manager.nim b/tests/v2/test_peer_manager.nim index 3b9e6e3ef..b7a92231d 100644 --- a/tests/v2/test_peer_manager.nim +++ b/tests/v2/test_peer_manager.nim @@ -529,7 +529,7 @@ procSuite "Peer Manager": pm.peerStore[ConnectionBook][peers[10].peerId] = Connected pm.peerStore[ConnectionBook][peers[12].peerId] = Connected - # Prune the peerstore + # Prune the peerstore (current=15, target=5) pm.prunePeerStore() check: diff --git a/waku/v2/node/peer_manager/peer_manager.nim b/waku/v2/node/peer_manager/peer_manager.nim index 83bb4e926..6148e44ab 100644 --- a/waku/v2/node/peer_manager/peer_manager.nim +++ b/waku/v2/node/peer_manager/peer_manager.nim @@ -405,7 +405,9 @@ proc prunePeerStore*(pm: PeerManager) = # prune peers with too many failed attempts var pruned = 0 - for peerId in pm.peerStore[NumberFailedConnBook].book.keys: + # copy to avoid modifying the book while iterating + let peerKeys = toSeq(pm.peerStore[NumberFailedConnBook].book.keys) + for peerId in peerKeys: if peersToPrune - pruned == 0: break if pm.peerStore[NumberFailedConnBook][peerId] >= pm.maxFailedAttempts: