diff options
Diffstat (limited to 'src/encoding/gob/type_test.go')
-rw-r--r-- | src/encoding/gob/type_test.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/encoding/gob/type_test.go b/src/encoding/gob/type_test.go index 14f25d8ac4..934270eedd 100644 --- a/src/encoding/gob/type_test.go +++ b/src/encoding/gob/type_test.go @@ -7,6 +7,7 @@ package gob import ( "bytes" "reflect" + "sync" "testing" ) @@ -218,3 +219,44 @@ func TestStressParallel(t *testing.T) { <-c } } + +// Issue 23328. Note that this test name is known to cmd/dist/test.go. +func TestTypeRace(t *testing.T) { + c := make(chan bool) + var wg sync.WaitGroup + for i := 0; i < 2; i++ { + wg.Add(1) + go func(i int) { + defer wg.Done() + var buf bytes.Buffer + enc := NewEncoder(&buf) + dec := NewDecoder(&buf) + var x interface{} + switch i { + case 0: + x = &N1{} + case 1: + x = &N2{} + default: + t.Errorf("bad i %d", i) + return + } + m := make(map[string]string) + <-c + if err := enc.Encode(x); err != nil { + t.Error(err) + return + } + if err := enc.Encode(x); err != nil { + t.Error(err) + return + } + if err := dec.Decode(&m); err == nil { + t.Error("decode unexpectedly succeeded") + return + } + }(i) + } + close(c) + wg.Wait() +} |