diff options
author | gVisor bot <gvisor-bot@google.com> | 2020-01-30 20:12:55 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2020-01-30 20:12:55 +0000 |
commit | b9a77ffd1498b14a1ea2dd7cf737defaf41ed877 (patch) | |
tree | 2534c9d2039a1388bb922a7be573cf3ee548d99f /pkg/tcpip/transport | |
parent | 08c27175c040412b94b349a9a87b055f7c7e2886 (diff) | |
parent | 4ee64a248ec16fcc9e526a457a66648546611bfb (diff) |
Merge release-20200127.0-38-g4ee64a2 (automated)
Diffstat (limited to 'pkg/tcpip/transport')
-rw-r--r-- | pkg/tcpip/transport/tcp/endpoint.go | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/pkg/tcpip/transport/tcp/endpoint.go b/pkg/tcpip/transport/tcp/endpoint.go index 8d52414b7..b5a8e15ee 100644 --- a/pkg/tcpip/transport/tcp/endpoint.go +++ b/pkg/tcpip/transport/tcp/endpoint.go @@ -2047,8 +2047,14 @@ func (e *endpoint) Shutdown(flags tcpip.ShutdownFlags) *tcpip.Error { // work mutex is available. if e.workMu.TryLock() { e.mu.Lock() - e.resetConnectionLocked(tcpip.ErrConnectionAborted) - e.notifyProtocolGoroutine(notifyTickleWorker) + // We need to double check here to make + // sure worker has not transitioned the + // endpoint out of a connected state + // before trying to send a reset. + if e.EndpointState().connected() { + e.resetConnectionLocked(tcpip.ErrConnectionAborted) + e.notifyProtocolGoroutine(notifyTickleWorker) + } e.mu.Unlock() e.workMu.Unlock() } else { |