summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--pkg/tcpip/transport/tcp/accept.go6
-rw-r--r--pkg/tcpip/transport/tcp/endpoint.go28
2 files changed, 13 insertions, 21 deletions
diff --git a/pkg/tcpip/transport/tcp/accept.go b/pkg/tcpip/transport/tcp/accept.go
index 52d121907..2a77f07cf 100644
--- a/pkg/tcpip/transport/tcp/accept.go
+++ b/pkg/tcpip/transport/tcp/accept.go
@@ -525,10 +525,8 @@ func (e *endpoint) handleListenSegment(ctx *listenContext, s *segment) tcpip.Err
e.acceptMu.Lock()
defer e.acceptMu.Unlock()
for {
- if e.acceptQueue == (acceptQueue{}) {
- // If the listener has transitioned out of the listen state
- // (accepted is the zero value), the new endpoint is reset
- // instead.
+ // The listener is transitioning out of the Listen state; bail.
+ if e.acceptQueue.capacity == 0 {
return false
}
if e.acceptQueue.isFull() {
diff --git a/pkg/tcpip/transport/tcp/endpoint.go b/pkg/tcpip/transport/tcp/endpoint.go
index ec7e98ec8..6fca6346b 100644
--- a/pkg/tcpip/transport/tcp/endpoint.go
+++ b/pkg/tcpip/transport/tcp/endpoint.go
@@ -1085,10 +1085,6 @@ func (e *endpoint) closePendingAcceptableConnectionsLocked() {
e.acceptQueue = acceptQueue{}
e.acceptMu.Unlock()
- if acceptedCopy == (acceptQueue{}) {
- return
- }
-
e.acceptCond.Broadcast()
// Reset all connections that are waiting to be accepted.
@@ -2486,21 +2482,19 @@ func (e *endpoint) listen(backlog int) tcpip.Error {
if e.EndpointState() == StateListen && !e.closed {
e.acceptMu.Lock()
defer e.acceptMu.Unlock()
- if e.acceptQueue == (acceptQueue{}) {
- // listen is called after shutdown.
- e.shutdownFlags = 0
- e.rcvQueueInfo.rcvQueueMu.Lock()
- e.rcvQueueInfo.RcvClosed = false
- e.rcvQueueInfo.rcvQueueMu.Unlock()
- } else {
- // Adjust the size of the backlog iff we can fit
- // existing pending connections into the new one.
- if e.acceptQueue.endpoints.Len() > backlog {
- return &tcpip.ErrInvalidEndpointState{}
- }
+
+ // Adjust the size of the backlog iff we can fit
+ // existing pending connections into the new one.
+ if e.acceptQueue.endpoints.Len() > backlog {
+ return &tcpip.ErrInvalidEndpointState{}
}
e.acceptQueue.capacity = backlog
+ e.shutdownFlags = 0
+ e.rcvQueueInfo.rcvQueueMu.Lock()
+ e.rcvQueueInfo.RcvClosed = false
+ e.rcvQueueInfo.rcvQueueMu.Unlock()
+
// Notify any blocked goroutines that they can attempt to
// deliver endpoints again.
e.acceptCond.Broadcast()
@@ -2535,7 +2529,7 @@ func (e *endpoint) listen(backlog int) tcpip.Error {
// may be pre-populated with some previously accepted (but not Accepted)
// endpoints.
e.acceptMu.Lock()
- if e.acceptQueue == (acceptQueue{}) {
+ if e.acceptQueue.capacity == 0 {
e.acceptQueue.capacity = backlog
}
e.acceptMu.Unlock()