Skip to content

Commit

Permalink
hold lock during map access
Browse files Browse the repository at this point in the history
  • Loading branch information
Brian Tiger Chow committed Jan 17, 2015
1 parent a486b5e commit d0f15c7
Showing 1 changed file with 14 additions and 5 deletions.
19 changes: 14 additions & 5 deletions p2p/net/mock/mock_peernet.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,12 +129,16 @@ func (pn *peernet) connect(p peer.ID) (*conn, error) {
// first, check if we already have live connections
pn.RLock()
cs, found := pn.connsByPeer[p]
pn.RUnlock()
if found && len(cs) > 0 {
for c := range cs {
return c, nil
var chosen *conn
for c := range cs { // because cs is a map
chosen = c // select first
break
}
pn.RUnlock()
return chosen, nil
}
pn.RUnlock()

log.Debugf("%s (newly) dialing %s", pn.peer, p)

Expand Down Expand Up @@ -267,12 +271,17 @@ func (pn *peernet) ConnsToPeer(p peer.ID) []inet.Conn {
func (pn *peernet) ClosePeer(p peer.ID) error {
pn.RLock()
cs, found := pn.connsByPeer[p]
pn.RUnlock()
if !found {
pn.RUnlock()
return nil
}

var conns []*conn
for c := range cs {
conns = append(conns, c)
}
pn.RUnlock()
for _, c := range conns {
c.Close()
}
return nil
Expand Down Expand Up @@ -319,7 +328,6 @@ func (pn *peernet) NewStream(p peer.ID) (inet.Stream, error) {
pn.Unlock()
return nil, fmt.Errorf("no connection to peer")
}
pn.Unlock()

// if many conns are found, how do we select? for now, randomly...
// this would be an interesting place to test logic that can measure
Expand All @@ -332,6 +340,7 @@ func (pn *peernet) NewStream(p peer.ID) (inet.Stream, error) {
}
n--
}
pn.Unlock()

return c.NewStream()
}
Expand Down

0 comments on commit d0f15c7

Please sign in to comment.