summaryrefslogtreecommitdiffhomepage
path: root/pkg
diff options
context:
space:
mode:
authorBrian Geffon <bgeffon@google.com>2018-05-24 15:45:55 -0700
committerShentubot <shentubot@google.com>2018-05-24 15:46:50 -0700
commita8b90a7158d4197428639c912d97f3bdbaf63f5a (patch)
tree9231803fe00925d4e33a784fe4187c79b5517d23 /pkg
parent7f62e9c32ea6af19ccd92107252fd869e6ef1005 (diff)
Poll should wake up on ECONNREFUSED with no mask.
Today poll will not wake up on a ECONNREFUSED if no poll mask is specified, which is equivalent to POLLHUP | POLLERR which are implicitly added during the poll syscall. PiperOrigin-RevId: 197967183 Change-Id: I668d0730c33701228913f2d0843b48491b642efb
Diffstat (limited to 'pkg')
-rw-r--r--pkg/tcpip/transport/tcp/connect.go6
-rw-r--r--pkg/waiter/waiter.go2
2 files changed, 3 insertions, 5 deletions
diff --git a/pkg/tcpip/transport/tcp/connect.go b/pkg/tcpip/transport/tcp/connect.go
index efd69fa86..66904856c 100644
--- a/pkg/tcpip/transport/tcp/connect.go
+++ b/pkg/tcpip/transport/tcp/connect.go
@@ -819,7 +819,8 @@ func (e *endpoint) protocolMainLoop(passive bool) *tcpip.Error {
defer func() {
// e.mu is expected to be held upon entering this section.
- e.waiterQueue.Notify(waiter.EventIn | waiter.EventOut)
+ // When the protocol loop exits we should wake up our waiters.
+ e.waiterQueue.Notify(waiter.EventHUp | waiter.EventErr | waiter.EventIn | waiter.EventOut)
e.completeWorkerLocked()
if e.snd != nil {
@@ -880,9 +881,6 @@ func (e *endpoint) protocolMainLoop(passive bool) *tcpip.Error {
e.waiterQueue.Notify(waiter.EventOut)
- // When the protocol loop exits we should wake up our waiters with EventHUp.
- defer e.waiterQueue.Notify(waiter.EventHUp)
-
// Set up the functions that will be called when the main protocol loop
// wakes up.
funcs := []struct {
diff --git a/pkg/waiter/waiter.go b/pkg/waiter/waiter.go
index 56f53f9c3..ab39fa002 100644
--- a/pkg/waiter/waiter.go
+++ b/pkg/waiter/waiter.go
@@ -174,7 +174,7 @@ func (q *Queue) Notify(mask EventMask) {
q.mu.RLock()
for it := q.list.Front(); it != nil; it = it.Next() {
e := it.(*Entry)
- if (mask & e.mask) != 0 {
+ if mask&e.mask != 0 {
e.Callback.Callback(e)
}
}