1
0
mirror of https://github.com/golang/go synced 2024-11-12 09:50:21 -07:00

sync: support Pool under race detector

Fixes #7203.

R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/53020044
This commit is contained in:
Dmitriy Vyukov 2014-01-25 20:11:16 +04:00
parent 1fa7029425
commit ce8045f393
2 changed files with 15 additions and 0 deletions

View 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 {

View 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 (