diff options
Diffstat (limited to 'pkg/tcpip/stack/neighbor_entry.go')
-rw-r--r-- | pkg/tcpip/stack/neighbor_entry.go | 38 |
1 files changed, 6 insertions, 32 deletions
diff --git a/pkg/tcpip/stack/neighbor_entry.go b/pkg/tcpip/stack/neighbor_entry.go index 78c6cb681..4ed149ee8 100644 --- a/pkg/tcpip/stack/neighbor_entry.go +++ b/pkg/tcpip/stack/neighbor_entry.go @@ -146,20 +146,6 @@ func newStaticNeighborEntry(cache *neighborCache, addr tcpip.Address, linkAddr t return n } -type remainingCounter struct { - mu struct { - sync.Mutex - - remaining uint32 - } -} - -func (r *remainingCounter) init(max uint32) { - r.mu.Lock() - defer r.mu.Unlock() - r.mu.remaining = max -} - // notifyCompletionLocked notifies those waiting for address resolution, with // the link address if resolution completed successfully. // @@ -298,8 +284,7 @@ func (e *neighborEntry) setStateLocked(next NeighborState) { // Protected by e.mu. done := false - var remaining remainingCounter - remaining.init(config.MaxUnicastProbes) + remaining := config.MaxUnicastProbes addr := e.mu.neigh.Addr linkAddr := e.mu.neigh.LinkAddr @@ -310,13 +295,8 @@ func (e *neighborEntry) setStateLocked(next NeighborState) { e.mu.timer = timer{ done: &done, timer: e.cache.nic.stack.Clock().AfterFunc(0, func() { - // Okay to hold this lock while writing packets since we use a different - // lock per probe timer so there will not be any lock contention. - remaining.mu.Lock() - defer remaining.mu.Unlock() - var err tcpip.Error - timedoutResolution := remaining.mu.remaining == 0 + timedoutResolution := remaining == 0 if !timedoutResolution { err = e.cache.linkRes.LinkAddressRequest(addr, "" /* localAddr */, linkAddr) } @@ -335,7 +315,7 @@ func (e *neighborEntry) setStateLocked(next NeighborState) { return } - remaining.mu.remaining-- + remaining-- e.mu.timer.timer.Reset(config.RetransmitTimer) }), } @@ -373,8 +353,7 @@ func (e *neighborEntry) handlePacketQueuedLocked(localAddr tcpip.Address) { // Protected by e.mu. done := false - var remaining remainingCounter - remaining.init(config.MaxMulticastProbes) + remaining := config.MaxMulticastProbes addr := e.mu.neigh.Addr // Send a probe in another gorountine to free this thread of execution @@ -384,13 +363,8 @@ func (e *neighborEntry) handlePacketQueuedLocked(localAddr tcpip.Address) { e.mu.timer = timer{ done: &done, timer: e.cache.nic.stack.Clock().AfterFunc(0, func() { - // Okay to hold this lock while writing packets since we use a different - // lock per probe timer so there will not be any lock contention. - remaining.mu.Lock() - defer remaining.mu.Unlock() - var err tcpip.Error - timedoutResolution := remaining.mu.remaining == 0 + timedoutResolution := remaining == 0 if !timedoutResolution { // As per RFC 4861 section 7.2.2: // @@ -416,7 +390,7 @@ func (e *neighborEntry) handlePacketQueuedLocked(localAddr tcpip.Address) { return } - remaining.mu.remaining-- + remaining-- e.mu.timer.timer.Reset(config.RetransmitTimer) }), } |