mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
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
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user