]> Cypherpunks repositories - gostls13.git/commitdiff
sync: support Pool under race detector
authorDmitriy Vyukov <dvyukov@google.com>
Sat, 25 Jan 2014 16:11:16 +0000 (20:11 +0400)
committerDmitriy Vyukov <dvyukov@google.com>
Sat, 25 Jan 2014 16:11:16 +0000 (20:11 +0400)
Fixes #7203.

R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/53020044

src/pkg/sync/pool.go
src/pkg/sync/pool_test.go

index 1a388875464a84f264fe19e5778854c699342c3d..ca49d21a0d1df969b97c29c9bf96290fcd023326 100644 (file)
@@ -72,6 +72,12 @@ func init() {
 
 // Put adds x to the pool.
 func (p *Pool) Put(x interface{}) {
+       if raceenabled {
+               // Under race detector the Pool degenerates into no-op.
+               // It's conforming, simple and does not introduce excessive
+               // happens-before edges between unrelated goroutines.
+               return
+       }
        if x == nil {
                return
        }
@@ -95,6 +101,12 @@ func (p *Pool) Put(x interface{}) {
 // If Get would otherwise return nil and p.New is non-nil, Get returns
 // the result of calling p.New.
 func (p *Pool) Get() interface{} {
+       if raceenabled {
+               if p.New != nil {
+                       return p.New()
+               }
+               return nil
+       }
        l := p.pin()
        t := l.tail
        if t > 0 {
index accf524a9ff57e0a9dd3c9e671eff28a53e23c9f..7e02f69d6c399c06a629ed73582f6f3af6d9f77d 100644 (file)
@@ -2,6 +2,9 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// Pool is no-op under race detector, so all these tests do not work.
+// +build !race
+
 package sync_test
 
 import (