Closed
Description
What version of Go are you using (go version
)?
$ go version go version devel +6dbcc8b865 Thu Jan 9 15:38:00 2020 +0000 linux/amd64
What operating system and processor architecture are you using (go env
)?
go env
Output
$ go env GO111MODULE="auto" GOARCH="amd64" GOBIN="" GOCACHE="/home/rog/.cache/go-build" GOENV="/home/rog/.config/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOINSECURE="" GONOPROXY="github.com/heetch" GONOSUMDB="github.com/heetch" GOOS="linux" GOPATH="/home/rog/src/go" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/home/rog/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/home/rog/go/pkg/tool/linux_amd64" GCCGO="gccgo" AR="ar" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="/tmp/m/go.mod" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build752416385=/tmp/go-build -gno-record-gcc-switches" /pre>
What did you do?
When this test code runs under the race detector, I don't see a race detected, even though there is a race. When I add a sleep (set bogus
to true), the race detector does find the race.
https://play.golang.org/p/ECoOELB1fC1
package test
import (
"sync"
"testing"
"time"
)
const bogus = false
func corrupt(data []byte) {
copy(data, data[2:])
}
var saved string
func TestFoo(t *testing.T) {
data := []byte("hello there")
var wg sync.WaitGroup
wg.Add(1)
go func() {
saved = string(data)
wg.Done()
}()
if bogus {
time.Sleep(time.Millisecond)
}
corrupt(data)
wg.Wait()
t.Logf("saved %q; data %q", saved, data)
}