aboutsummaryrefslogtreecommitdiff
path: root/src/sync
diff options
context:
space:
mode:
Diffstat (limited to 'src/sync')
-rw-r--r--src/sync/export_test.go2
-rw-r--r--src/sync/pool_test.go11
2 files changed, 13 insertions, 0 deletions
diff --git a/src/sync/export_test.go b/src/sync/export_test.go
index 6ed38dad89..669076efad 100644
--- a/src/sync/export_test.go
+++ b/src/sync/export_test.go
@@ -7,3 +7,5 @@ package sync
// Export for testing.
var Runtime_Semacquire = runtime_Semacquire
var Runtime_Semrelease = runtime_Semrelease
+var Runtime_procPin = runtime_procPin
+var Runtime_procUnpin = runtime_procUnpin
diff --git a/src/sync/pool_test.go b/src/sync/pool_test.go
index 5a38cbfcb6..9e5132bb18 100644
--- a/src/sync/pool_test.go
+++ b/src/sync/pool_test.go
@@ -23,6 +23,10 @@ func TestPool(t *testing.T) {
if p.Get() != nil {
t.Fatal("expected empty")
}
+
+ // Make sure that the goroutine doesn't migrate to another P
+ // between Put and Get calls.
+ Runtime_procPin()
p.Put("a")
p.Put("b")
if g := p.Get(); g != "a" {
@@ -34,6 +38,7 @@ func TestPool(t *testing.T) {
if g := p.Get(); g != nil {
t.Fatalf("got %#v; want nil", g)
}
+ Runtime_procUnpin()
p.Put("c")
debug.SetGCPercent(100) // to allow following GC to actually run
@@ -60,10 +65,16 @@ func TestPoolNew(t *testing.T) {
if v := p.Get(); v != 2 {
t.Fatalf("got %v; want 2", v)
}
+
+ // Make sure that the goroutine doesn't migrate to another P
+ // between Put and Get calls.
+ Runtime_procPin()
p.Put(42)
if v := p.Get(); v != 42 {
t.Fatalf("got %v; want 42", v)
}
+ Runtime_procUnpin()
+
if v := p.Get(); v != 3 {
t.Fatalf("got %v; want 3", v)
}