mirror of
https://github.com/status-im/go-waku.git
synced 2025-02-05 10:23:32 +00:00
fix: concurrent peerMap iteration and write (#1266)
This commit is contained in:
parent
9a243696d7
commit
ffed0595ad
@ -130,6 +130,7 @@ func (pm *PeerManager) selectServicePeer(criteria PeerSelectionCriteria) (PeerSe
|
|||||||
if len(criteria.PubsubTopics) == 0 || (len(criteria.PubsubTopics) == 1 && criteria.PubsubTopics[0] == "") {
|
if len(criteria.PubsubTopics) == 0 || (len(criteria.PubsubTopics) == 1 && criteria.PubsubTopics[0] == "") {
|
||||||
return slot.getRandom(criteria.MaxPeers, criteria.ExcludePeers)
|
return slot.getRandom(criteria.MaxPeers, criteria.ExcludePeers)
|
||||||
} else { //PubsubTopic based selection
|
} else { //PubsubTopic based selection
|
||||||
|
slot.mu.RLock()
|
||||||
keys := make([]peer.ID, 0, len(slot.m))
|
keys := make([]peer.ID, 0, len(slot.m))
|
||||||
for i := range slot.m {
|
for i := range slot.m {
|
||||||
if PeerInSet(criteria.ExcludePeers, i) {
|
if PeerInSet(criteria.ExcludePeers, i) {
|
||||||
@ -137,6 +138,7 @@ func (pm *PeerManager) selectServicePeer(criteria PeerSelectionCriteria) (PeerSe
|
|||||||
}
|
}
|
||||||
keys = append(keys, i)
|
keys = append(keys, i)
|
||||||
}
|
}
|
||||||
|
slot.mu.RUnlock()
|
||||||
selectedPeers := pm.host.Peerstore().(wps.WakuPeerstore).PeersByPubSubTopics(criteria.PubsubTopics, keys...)
|
selectedPeers := pm.host.Peerstore().(wps.WakuPeerstore).PeersByPubSubTopics(criteria.PubsubTopics, keys...)
|
||||||
tmpPeers, err := selectRandomPeers(selectedPeers, criteria.ExcludePeers, criteria.MaxPeers)
|
tmpPeers, err := selectRandomPeers(selectedPeers, criteria.ExcludePeers, criteria.MaxPeers)
|
||||||
for tmpPeer := range tmpPeers {
|
for tmpPeer := range tmpPeers {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user