diff options
author | Amanda Tait <atait@google.com> | 2019-02-26 09:09:42 -0800 |
---|---|---|
committer | Shentubot <shentubot@google.com> | 2019-02-26 09:10:37 -0800 |
commit | 33d0e824c73a918ad59586084b47cd53fe07ca36 (patch) | |
tree | 903e21729569dd0b79a2a0c27659f95876a8139b /pkg | |
parent | 52a2abfca43cffdb9cafb91a4266dacf51525470 (diff) |
Use more conservative locking in NIC.DeliverNetworkPacket
An earlier CL excessively minimizes the period in which it
holds a lock on NIC. This earlier CL had done this out of
the mistaken impression it fixed a broken test, when in
fact it just reduced the rate of failure of a flaky test
in tcp_test.go. This new change holds the lock on NIC
for the duration of the loop over n.endpoints.
PiperOrigin-RevId: 235732487
Change-Id: I53ee6df264f093ddc4d29e9acdcba6b4838cb112
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/tcpip/stack/nic.go | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/pkg/tcpip/stack/nic.go b/pkg/tcpip/stack/nic.go index a6b04faaf..2278fbf65 100644 --- a/pkg/tcpip/stack/nic.go +++ b/pkg/tcpip/stack/nic.go @@ -406,14 +406,12 @@ func (n *NIC) DeliverNetworkPacket(linkEP LinkEndpoint, remote, _ tcpip.LinkAddr // n.endpoints is mutex protected so acquire lock. n.mu.RLock() for _, ref := range n.endpoints { - n.mu.RUnlock() if ref.protocol == header.IPv4ProtocolNumber && ref.tryIncRef() { r := makeRoute(protocol, dst, src, linkEP.LinkAddress(), ref) r.RemoteLinkAddress = remote ref.ep.HandlePacket(&r, vv) ref.decRef() } - n.mu.RLock() } n.mu.RUnlock() return |