From d2335607680e36325f54737b2bbae04b2a80bf17 Mon Sep 17 00:00:00 2001 From: Janos Guljas Date: Fri, 8 Feb 2019 12:34:35 +0100 Subject: [PATCH] swarm/network/stream: fix data races in GetPeerSubscriptions --- swarm/network/stream/stream.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/swarm/network/stream/stream.go b/swarm/network/stream/stream.go index 485a69ea28..7d142693e1 100644 --- a/swarm/network/stream/stream.go +++ b/swarm/network/stream/stream.go @@ -938,16 +938,22 @@ It returns a map of node IDs with an array of string representations of Stream o func (api *API) GetPeerSubscriptions() map[string][]string { //create the empty map pstreams := make(map[string][]string) + //iterate all streamer peers + api.streamer.peersMu.RLock() + defer api.streamer.peersMu.RUnlock() + for id, p := range api.streamer.peers { var streams []string //every peer has a map of stream servers //every stream server represents a subscription + p.serverMu.RLock() for s := range p.servers { //append the string representation of the stream //to the list for this peer streams = append(streams, s.String()) } + p.serverMu.RUnlock() //set the array of stream servers to the map pstreams[id.String()] = streams }