mirror of
https://github.com/golang/go
synced 2024-11-19 21:04:43 -07:00
net: fix data race in benchmarks
Fixes #10307. Change-Id: If70f36a6f1c4e465a47a0bc4d38b318424111106 Reviewed-on: https://go-review.googlesource.com/8330 Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
9b696be08b
commit
93553dd216
@ -219,8 +219,7 @@ func TestReloadResolvConfChange(t *testing.T) {
|
||||
}
|
||||
|
||||
func BenchmarkGoLookupIP(b *testing.B) {
|
||||
uninstallTestHooks()
|
||||
defer installTestHooks()
|
||||
testHookUninstaller.Do(func() { uninstallTestHooks() })
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
goLookupIP("www.example.com")
|
||||
@ -228,8 +227,7 @@ func BenchmarkGoLookupIP(b *testing.B) {
|
||||
}
|
||||
|
||||
func BenchmarkGoLookupIPNoSuchHost(b *testing.B) {
|
||||
uninstallTestHooks()
|
||||
defer installTestHooks()
|
||||
testHookUninstaller.Do(func() { uninstallTestHooks() })
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
goLookupIP("some.nonexistent")
|
||||
@ -237,8 +235,7 @@ func BenchmarkGoLookupIPNoSuchHost(b *testing.B) {
|
||||
}
|
||||
|
||||
func BenchmarkGoLookupIPWithBrokenNameServer(b *testing.B) {
|
||||
uninstallTestHooks()
|
||||
defer installTestHooks()
|
||||
testHookUninstaller.Do(func() { uninstallTestHooks() })
|
||||
|
||||
onceLoadConfig.Do(loadDefaultConfig)
|
||||
if cfg.dnserr != nil || cfg.dnsConfig == nil {
|
||||
|
@ -69,8 +69,7 @@ func TestDNSNames(t *testing.T) {
|
||||
}
|
||||
|
||||
func BenchmarkDNSNames(b *testing.B) {
|
||||
uninstallTestHooks()
|
||||
defer installTestHooks()
|
||||
testHookUninstaller.Do(func() { uninstallTestHooks() })
|
||||
|
||||
benchmarks := append(tests, []testCase{
|
||||
{strings.Repeat("a", 63), true},
|
||||
|
@ -229,8 +229,7 @@ func testMulticastAddrs(t *testing.T, ifmat []Addr) (nmaf4, nmaf6 int) {
|
||||
}
|
||||
|
||||
func BenchmarkInterfaces(b *testing.B) {
|
||||
uninstallTestHooks()
|
||||
defer installTestHooks()
|
||||
testHookUninstaller.Do(func() { uninstallTestHooks() })
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
if _, err := Interfaces(); err != nil {
|
||||
@ -240,8 +239,7 @@ func BenchmarkInterfaces(b *testing.B) {
|
||||
}
|
||||
|
||||
func BenchmarkInterfaceByIndex(b *testing.B) {
|
||||
uninstallTestHooks()
|
||||
defer installTestHooks()
|
||||
testHookUninstaller.Do(func() { uninstallTestHooks() })
|
||||
|
||||
ifi := loopbackInterface()
|
||||
if ifi == nil {
|
||||
@ -255,8 +253,7 @@ func BenchmarkInterfaceByIndex(b *testing.B) {
|
||||
}
|
||||
|
||||
func BenchmarkInterfaceByName(b *testing.B) {
|
||||
uninstallTestHooks()
|
||||
defer installTestHooks()
|
||||
testHookUninstaller.Do(func() { uninstallTestHooks() })
|
||||
|
||||
ifi := loopbackInterface()
|
||||
if ifi == nil {
|
||||
@ -270,8 +267,7 @@ func BenchmarkInterfaceByName(b *testing.B) {
|
||||
}
|
||||
|
||||
func BenchmarkInterfaceAddrs(b *testing.B) {
|
||||
uninstallTestHooks()
|
||||
defer installTestHooks()
|
||||
testHookUninstaller.Do(func() { uninstallTestHooks() })
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
if _, err := InterfaceAddrs(); err != nil {
|
||||
@ -281,8 +277,7 @@ func BenchmarkInterfaceAddrs(b *testing.B) {
|
||||
}
|
||||
|
||||
func BenchmarkInterfacesAndAddrs(b *testing.B) {
|
||||
uninstallTestHooks()
|
||||
defer installTestHooks()
|
||||
testHookUninstaller.Do(func() { uninstallTestHooks() })
|
||||
|
||||
ifi := loopbackInterface()
|
||||
if ifi == nil {
|
||||
@ -296,8 +291,7 @@ func BenchmarkInterfacesAndAddrs(b *testing.B) {
|
||||
}
|
||||
|
||||
func BenchmarkInterfacesAndMulticastAddrs(b *testing.B) {
|
||||
uninstallTestHooks()
|
||||
defer installTestHooks()
|
||||
testHookUninstaller.Do(func() { uninstallTestHooks() })
|
||||
|
||||
ifi := loopbackInterface()
|
||||
if ifi == nil {
|
||||
|
@ -53,8 +53,7 @@ func TestParseIP(t *testing.T) {
|
||||
}
|
||||
|
||||
func BenchmarkParseIP(b *testing.B) {
|
||||
uninstallTestHooks()
|
||||
defer installTestHooks()
|
||||
testHookUninstaller.Do(func() { uninstallTestHooks() })
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
for _, tt := range parseIPTests {
|
||||
@ -111,8 +110,7 @@ func TestIPString(t *testing.T) {
|
||||
}
|
||||
|
||||
func BenchmarkIPString(b *testing.B) {
|
||||
uninstallTestHooks()
|
||||
defer installTestHooks()
|
||||
testHookUninstaller.Do(func() { uninstallTestHooks() })
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
for _, tt := range ipStringTests {
|
||||
@ -164,8 +162,7 @@ func TestIPMaskString(t *testing.T) {
|
||||
}
|
||||
|
||||
func BenchmarkIPMaskString(b *testing.B) {
|
||||
uninstallTestHooks()
|
||||
defer installTestHooks()
|
||||
testHookUninstaller.Do(func() { uninstallTestHooks() })
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
for _, tt := range ipMaskStringTests {
|
||||
|
@ -11,23 +11,29 @@ import (
|
||||
"runtime"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
"testing"
|
||||
)
|
||||
|
||||
var sw socktest.Switch
|
||||
var (
|
||||
sw socktest.Switch
|
||||
|
||||
// uninstallTestHooks runs just before a run of benchmarks.
|
||||
testHookUninstaller sync.Once
|
||||
)
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
installTestHooks()
|
||||
|
||||
st := m.Run()
|
||||
|
||||
testHookUninstaller.Do(func() { uninstallTestHooks() })
|
||||
if !testing.Short() {
|
||||
printLeakedGoroutines()
|
||||
printLeakedSockets()
|
||||
printSocketStats()
|
||||
}
|
||||
forceCloseSockets()
|
||||
uninstallTestHooks()
|
||||
os.Exit(st)
|
||||
}
|
||||
|
||||
|
@ -59,8 +59,7 @@ func BenchmarkTCP6PersistentTimeout(b *testing.B) {
|
||||
}
|
||||
|
||||
func benchmarkTCP(b *testing.B, persistent, timeout bool, laddr string) {
|
||||
uninstallTestHooks()
|
||||
defer installTestHooks()
|
||||
testHookUninstaller.Do(func() { uninstallTestHooks() })
|
||||
|
||||
const msgLen = 512
|
||||
conns := b.N
|
||||
@ -170,13 +169,13 @@ func BenchmarkTCP6ConcurrentReadWrite(b *testing.B) {
|
||||
}
|
||||
|
||||
func benchmarkTCPConcurrentReadWrite(b *testing.B, laddr string) {
|
||||
testHookUninstaller.Do(func() { uninstallTestHooks() })
|
||||
|
||||
// The benchmark creates GOMAXPROCS client/server pairs.
|
||||
// Each pair creates 4 goroutines: client reader/writer and server reader/writer.
|
||||
// The benchmark stresses concurrent reading and writing to the same connection.
|
||||
// Such pattern is used in net/http and net/rpc.
|
||||
|
||||
uninstallTestHooks()
|
||||
defer installTestHooks()
|
||||
b.StopTimer()
|
||||
|
||||
P := runtime.GOMAXPROCS(0)
|
||||
|
Loading…
Reference in New Issue
Block a user