aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/race
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2019-12-02 12:07:22 -0800
committerIan Lance Taylor <iant@golang.org>2019-12-02 22:42:22 +0000
commit94f4686a77d1d708f240eac388fb5c5b83e2c15f (patch)
tree3aa8fda7bd9c252db61259ce181ab1cd71a60ebc /src/runtime/race
parenta18608a044afed86c789e541db65526b9ccacef9 (diff)
downloadgo-94f4686a77d1d708f240eac388fb5c5b83e2c15f.tar.gz
go-94f4686a77d1d708f240eac388fb5c5b83e2c15f.zip
runtime: use current P's race context in timer code
We were using the race context of the P that held the timer, but since we unlock the P's timers while executing a timer that could lead to a race on the race context itself. Updates #6239 Updates #27707 Fixes #35906 Change-Id: I5f9d5f52d8e28dffb88c3327301071b16ed1a913 Reviewed-on: https://go-review.googlesource.com/c/go/+/209580 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Michael Knyszek <mknyszek@google.com>
Diffstat (limited to 'src/runtime/race')
-rw-r--r--src/runtime/race/timer_test.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/runtime/race/timer_test.go b/src/runtime/race/timer_test.go
new file mode 100644
index 0000000000..a6c34a8352
--- /dev/null
+++ b/src/runtime/race/timer_test.go
@@ -0,0 +1,33 @@
+// Copyright 2019 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build race
+
+package race_test
+
+import (
+ "sync"
+ "testing"
+ "time"
+)
+
+func TestTimers(t *testing.T) {
+ const goroutines = 8
+ var wg sync.WaitGroup
+ wg.Add(goroutines)
+ var mu sync.Mutex
+ for i := 0; i < goroutines; i++ {
+ go func() {
+ defer wg.Done()
+ ticker := time.NewTicker(1)
+ defer ticker.Stop()
+ for c := 0; c < 1000; c++ {
+ <-ticker.C
+ mu.Lock()
+ mu.Unlock()
+ }
+ }()
+ }
+ wg.Wait()
+}