]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: add concurrent map read test
authorBrad Fitzpatrick <bradfitz@golang.org>
Mon, 1 Apr 2013 18:49:24 +0000 (11:49 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Mon, 1 Apr 2013 18:49:24 +0000 (11:49 -0700)
Currently crashes, so disabled.

Update #5179

R=golang-dev, khr
CC=golang-dev
https://golang.org/cl/8222044

src/pkg/runtime/map_test.go

index 1bf6b60d83e3f63762eba70226ff870c2d268956..cc8863b2eeb4749c18d22e6c98e73e7a3871dab4 100644 (file)
@@ -7,8 +7,10 @@ package runtime_test
 import (
        "fmt"
        "math"
+       "os"
        "runtime"
        "sort"
+       "sync"
        "testing"
 )
 
@@ -231,6 +233,43 @@ func TestIterGrowWithGC(t *testing.T) {
        }
 }
 
+func TestConcurrentReadsAfterGrowth(t *testing.T) {
+       // TODO(khr): fix and enable this test.
+       t.Skip("Known currently broken; golang.org/issue/5179")
+
+       if os.Getenv("GOMAXPROCS") == "" {
+               defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(16))
+       }
+       numLoop := 10
+       numGrowStep := 250
+       numReader := 16
+       if testing.Short() {
+               numLoop, numGrowStep = 2, 500
+       }
+       for i := 0; i < numLoop; i++ {
+               m := make(map[int]int, 0)
+               for gs := 0; gs < numGrowStep; gs++ {
+                       m[gs] = gs
+                       var wg sync.WaitGroup
+                       wg.Add(numReader * 2)
+                       for nr := 0; nr < numReader; nr++ {
+                               go func() {
+                                       defer wg.Done()
+                                       for _ = range m {
+                                       }
+                               }()
+                               go func() {
+                                       defer wg.Done()
+                                       for key := 0; key < gs; key++ {
+                                               _ = m[key]
+                                       }
+                               }()
+                       }
+                       wg.Wait()
+               }
+       }
+}
+
 func TestBigItems(t *testing.T) {
        var key [256]string
        for i := 0; i < 256; i++ {