From eca66a8891547554a4bc7f51657e5aa0ece30b58 Mon Sep 17 00:00:00 2001 From: Jeromy Date: Wed, 15 Jun 2016 11:07:30 -0700 Subject: [PATCH] fix minor race condition in nat detection code --- p2p/nat/nat.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/p2p/nat/nat.go b/p2p/nat/nat.go index 237c129..4dd6f04 100644 --- a/p2p/nat/nat.go +++ b/p2p/nat/nat.go @@ -164,6 +164,7 @@ type mapping struct { cached ma.Multiaddr cacheTime time.Time + cacheLk sync.Mutex } func (m *mapping) NAT() *NAT { @@ -203,8 +204,12 @@ func (m *mapping) InternalAddr() ma.Multiaddr { } func (m *mapping) ExternalAddr() (ma.Multiaddr, error) { - if time.Now().Sub(m.cacheTime) < CacheTime { - return m.cached, nil + m.cacheLk.Lock() + ctime := m.cacheTime + cval := m.cached + m.cacheLk.Unlock() + if time.Now().Sub(ctime) < CacheTime { + return cval, nil } if m.ExternalPort() == 0 { // dont even try right now. @@ -234,8 +239,10 @@ func (m *mapping) ExternalAddr() (ma.Multiaddr, error) { maddr2 := ipmaddr.Encapsulate(tcp) + m.cacheLk.Lock() m.cached = maddr2 m.cacheTime = time.Now() + m.cacheLk.Unlock() return maddr2, nil } -- GitLab