diff --git a/peer/peer.go b/peer/peer.go index c1a67443d..fb9dead0a 100644 --- a/peer/peer.go +++ b/peer/peer.go @@ -38,8 +38,9 @@ type Peer struct { PrivKey ic.PrivKey PubKey ic.PubKey - latency time.Duration - latenLock sync.RWMutex + latency time.Duration + + sync.RWMutex } // Key returns the ID as a Key (string) for maps. @@ -49,6 +50,9 @@ func (p *Peer) Key() u.Key { // AddAddress adds the given Multiaddr address to Peer's addresses. func (p *Peer) AddAddress(a *ma.Multiaddr) { + p.Lock() + defer p.Unlock() + for _, addr := range p.Addresses { if addr.Equal(a) { return @@ -59,6 +63,9 @@ func (p *Peer) AddAddress(a *ma.Multiaddr) { // NetAddress returns the first Multiaddr found for a given network. func (p *Peer) NetAddress(n string) *ma.Multiaddr { + p.RLock() + defer p.RUnlock() + for _, a := range p.Addresses { ps, err := a.Protocols() if err != nil { @@ -76,17 +83,18 @@ func (p *Peer) NetAddress(n string) *ma.Multiaddr { // GetLatency retrieves the current latency measurement. func (p *Peer) GetLatency() (out time.Duration) { - p.latenLock.RLock() + p.RLock() out = p.latency - p.latenLock.RUnlock() + p.RUnlock() return } // SetLatency sets the latency measurement. // TODO: Instead of just keeping a single number, // keep a running average over the last hour or so +// Yep, should be EWMA or something. (-jbenet) func (p *Peer) SetLatency(laten time.Duration) { - p.latenLock.Lock() + p.Lock() p.latency = laten - p.latenLock.Unlock() + p.Unlock() }