mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
net: add test for runtime.PollDesc leak
See 8318044 R=bradfitz CC=golang-dev https://golang.org/cl/8547043
This commit is contained in:
parent
afb49aada5
commit
77a0b96f2f
1 changed files with 42 additions and 0 deletions
|
|
@ -330,3 +330,45 @@ func numFD() int {
|
||||||
// All tests using this should be skipped anyway, but:
|
// All tests using this should be skipped anyway, but:
|
||||||
panic("numFDs not implemented on " + runtime.GOOS)
|
panic("numFDs not implemented on " + runtime.GOOS)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Assert that a failed Dial attempt does not leak
|
||||||
|
// runtime.PollDesc structures
|
||||||
|
func TestDialPollDescLeak(t *testing.T) {
|
||||||
|
// remove once CL 8318044 is submitted
|
||||||
|
t.Skip("Test skipped pending submission of CL 8318044")
|
||||||
|
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping PollDesc leak test in -short mode")
|
||||||
|
}
|
||||||
|
|
||||||
|
const loops = 10
|
||||||
|
const count = 20000
|
||||||
|
var old runtime.MemStats // used by sysdelta
|
||||||
|
runtime.ReadMemStats(&old)
|
||||||
|
sysdelta := func() uint64 {
|
||||||
|
var new runtime.MemStats
|
||||||
|
runtime.ReadMemStats(&new)
|
||||||
|
delta := old.Sys - new.Sys
|
||||||
|
old = new
|
||||||
|
return delta
|
||||||
|
}
|
||||||
|
failcount := 0
|
||||||
|
for i := 0; i < loops; i++ {
|
||||||
|
for i := 0; i < count; i++ {
|
||||||
|
conn, err := Dial("tcp", "127.0.0.1:1")
|
||||||
|
if err == nil {
|
||||||
|
t.Error("dial should not succeed")
|
||||||
|
conn.Close()
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if delta := sysdelta(); delta > 0 {
|
||||||
|
failcount++
|
||||||
|
}
|
||||||
|
// there are always some allocations on the first loop
|
||||||
|
if failcount > 3 {
|
||||||
|
t.Error("net.Dial leaked memory")
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue