The following test from std lib:
func TestAfterFunc(t *testing.T) {
i := 10
c := make(chan bool)
var f func()
f = func() {
i--
if i >= 0 {
AfterFunc(0, f)
Sleep(1 * Second)
} else {
c <- true
}
}
AfterFunc(0, f)
<-c
}
yields the following reports:
WARNING: Possible data race during write of size 1 at 0xf840077998: {{{
T5 (L{}):
#0 time_test._func_002 src/pkg/time/sleep_test.go:39
#1 runtime.goexit src/pkg/runtime/proc.c:266
Concurrent write(s) happened at (OR AFTER) these points:
T4 (L{}):
#0 time_test.TestAfterFunc src/pkg/time/sleep_test.go:35
#1 testing.tRunner src/pkg/testing/testing.go:226
#2 runtime.goexit src/pkg/runtime/proc.c:266
Location 0xf840077998 is 0 bytes inside a block starting at 0xf840077998 of size 8 allocated by T4 from heap:
#0
#1 testing.tRunner src/pkg/testing/testing.go:226
#2 runtime.goexit src/pkg/runtime/proc.c:266
Race verifier data: 0x42eaa8,0x424129
}}}
WARNING: Possible data race during read of size 1 at 0xf8400779a8: {{{
T5 (L{}):
#0 time_test._func_002 src/pkg/time/sleep_test.go:41
#1 runtime.goexit src/pkg/runtime/proc.c:266
Concurrent write(s) happened at (OR AFTER) these points:
T4 (L{}):
#0 time_test.TestAfterFunc src/pkg/time/sleep_test.go:46
#1 testing.tRunner src/pkg/testing/testing.go:226
#2 runtime.goexit src/pkg/runtime/proc.c:266
Location 0xf8400779a8 is 0 bytes inside a block starting at 0xf8400779a8 of size 8 allocated by T4 from heap:
#0
#1 testing.tRunner src/pkg/testing/testing.go:226
#2 runtime.goexit src/pkg/runtime/proc.c:266
Race verifier data: 0x42eadb,0x4241a6
}}}
The race are on the vars i and f, timer setup must happen-before timer body.
Original issue reported on code.google.com by dvyu...@google.com on 16 Jan 2012 at 7:22
Original issue reported on code.google.com by
dvyu...@google.com
on 16 Jan 2012 at 7:22