Commit 68557de1 authored by Mikio Hara's avatar Mikio Hara Committed by Russ Cox

net: deflake TestDialTimeout{,FDLeak} in the case of TCP simultaneous open

Fixes #11872.

Change-Id: Ibc7d8438374c9d90fd4cbefb61426c7f4f96af0d
Reviewed-on: https://go-review.googlesource.com/12691Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
parent 54a966e3
......@@ -124,7 +124,24 @@ func TestDialTimeoutFDLeak(t *testing.T) {
defer sw.Set(socktest.FilterConnect, nil)
}
before := sw.Sockets()
// Avoid tracking open-close jitterbugs between netFD and
// socket that leads to confusion of information inside
// socktest.Switch.
// It may happen when the Dial call bumps against TCP
// simultaneous open. See selfConnect in tcpsock_posix.go.
defer func() {
sw.Set(socktest.FilterClose, nil)
forceCloseSockets()
}()
var mu sync.Mutex
var attempts int
sw.Set(socktest.FilterClose, func(so *socktest.Status) (socktest.AfterFilter, error) {
mu.Lock()
attempts++
mu.Unlock()
return nil, errTimedout
})
const N = 100
var wg sync.WaitGroup
wg.Add(N)
......@@ -142,9 +159,8 @@ func TestDialTimeoutFDLeak(t *testing.T) {
}()
}
wg.Wait()
after := sw.Sockets()
if len(after) != len(before) {
t.Errorf("got %d; want %d", len(after), len(before))
if attempts < N {
t.Errorf("got %d; want >= %d", attempts, N)
}
}
......
......@@ -37,6 +37,19 @@ func TestDialTimeout(t *testing.T) {
defer func() { testHookDialChannel = origTestHookDialChannel }()
defer sw.Set(socktest.FilterConnect, nil)
// Avoid tracking open-close jitterbugs between netFD and
// socket that leads to confusion of information inside
// socktest.Switch.
// It may happen when the Dial call bumps against TCP
// simultaneous open. See selfConnect in tcpsock_posix.go.
defer func() {
sw.Set(socktest.FilterClose, nil)
forceCloseSockets()
}()
sw.Set(socktest.FilterClose, func(so *socktest.Status) (socktest.AfterFilter, error) {
return nil, errTimedout
})
for i, tt := range dialTimeoutTests {
switch runtime.GOOS {
case "plan9", "windows":
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment