Hi Dave,

1. the report:

> go version
go version go1.10 darwin/amd64

> go test -v -race -count=5 .
=== RUN   TestSyncAPI
==================
WARNING: DATA RACE
Read at 0x00c4200ca080 by goroutine 8:
  _/Users/yanqing11/test/go/sync1.(*Pool).Put()
      /Users/yanqing11/test/go/sync1/pool.go:108 +0xe8
  _/Users/yanqing11/test/go/sync1.TestSyncAPI.func2()
      /Users/yanqing11/test/go/sync1/pool_test.go:18 +0x50

Previous write at 0x00c4200ca080 by goroutine 7:
  _/Users/yanqing11/test/go/sync1.(*Pool).Put()
      /Users/yanqing11/test/go/sync1/pool.go:109 +0x2ad
  _/Users/yanqing11/test/go/sync1.TestSyncAPI.func1()
      /Users/yanqing11/test/go/sync1/pool_test.go:14 +0x5e

Goroutine 8 (running) created at:
  _/Users/yanqing11/test/go/sync1.TestSyncAPI()
      /Users/yanqing11/test/go/sync1/pool_test.go:17 +0x129
  testing.tRunner()
      /Users/yanqing11/dev/go/src/testing/testing.go:777 +0x16d

Goroutine 7 (finished) created at:
  _/Users/yanqing11/test/go/sync1.TestSyncAPI()
      /Users/yanqing11/test/go/sync1/pool_test.go:12 +0xfd
  testing.tRunner()
      /Users/yanqing11/dev/go/src/testing/testing.go:777 +0x16d
==================
==================
WARNING: DATA RACE
Write at 0x00c4200ca090 by goroutine 8:
  _/Users/yanqing11/test/go/sync1.(*Pool).Put()
      /Users/yanqing11/test/go/sync1/pool.go:115 +0x206
  _/Users/yanqing11/test/go/sync1.TestSyncAPI.func2()
      /Users/yanqing11/test/go/sync1/pool_test.go:18 +0x50

Previous read at 0x00c4200ca090 by goroutine 7:
  _/Users/yanqing11/test/go/sync1.(*Pool).Get()
      /Users/yanqing11/test/go/sync1/pool.go:141 +0x1ee
  _/Users/yanqing11/test/go/sync1.TestSyncAPI.func1()
      /Users/yanqing11/test/go/sync1/pool_test.go:13 +0x38

Goroutine 8 (running) created at:
  _/Users/yanqing11/test/go/sync1.TestSyncAPI()
      /Users/yanqing11/test/go/sync1/pool_test.go:17 +0x129
  testing.tRunner()
      /Users/yanqing11/dev/go/src/testing/testing.go:777 +0x16d

Goroutine 7 (finished) created at:
  _/Users/yanqing11/test/go/sync1.TestSyncAPI()
      /Users/yanqing11/test/go/sync1/pool_test.go:12 +0xfd
  testing.tRunner()
      /Users/yanqing11/dev/go/src/testing/testing.go:777 +0x16d
==================
==================
WARNING: DATA RACE
Read at 0x00c4200ce000 by goroutine 9:
  _/Users/yanqing11/test/go/sync1.(*Pool).getSlow()
      /Users/yanqing11/test/go/sync1/pool.go:175 +0x17a
  _/Users/yanqing11/test/go/sync1.(*Pool).Get()
      /Users/yanqing11/test/go/sync1/pool.go:148 +0x243
  _/Users/yanqing11/test/go/sync1.TestSyncAPI.func3()
      /Users/yanqing11/test/go/sync1/pool_test.go:23 +0x38

Previous write at 0x00c4200ce000 by goroutine 8:
  _/Users/yanqing11/test/go/sync1.(*Pool).Put()
      /Users/yanqing11/test/go/sync1/pool.go:115 +0x1c6
  _/Users/yanqing11/test/go/sync1.TestSyncAPI.func2()
      /Users/yanqing11/test/go/sync1/pool_test.go:18 +0x50

Goroutine 9 (running) created at:
  _/Users/yanqing11/test/go/sync1.TestSyncAPI()
      /Users/yanqing11/test/go/sync1/pool_test.go:22 +0x155
  testing.tRunner()
      /Users/yanqing11/dev/go/src/testing/testing.go:777 +0x16d

Goroutine 8 (finished) created at:
  _/Users/yanqing11/test/go/sync1.TestSyncAPI()
      /Users/yanqing11/test/go/sync1/pool_test.go:17 +0x129
  testing.tRunner()
      /Users/yanqing11/dev/go/src/testing/testing.go:777 +0x16d
==================
--- FAIL: TestSyncAPI (0.00s)
testing.go:730: race detected during execution of test
=== RUN   TestSyncAPI2
--- PASS: TestSyncAPI2 (0.00s)
=== RUN   TestSyncAPI
--- PASS: TestSyncAPI (0.00s)
=== RUN   TestSyncAPI2
--- PASS: TestSyncAPI2 (0.00s)
=== RUN   TestSyncAPI
--- PASS: TestSyncAPI (0.00s)
=== RUN   TestSyncAPI2
--- PASS: TestSyncAPI2 (0.00s)
=== RUN   TestSyncAPI
==================
WARNING: DATA RACE
Read at 0x00c42010a380 by goroutine 36:
  _/Users/yanqing11/test/go/sync1.(*Pool).Get()
      /Users/yanqing11/test/go/sync1/pool.go:136 +0x5c
  _/Users/yanqing11/test/go/sync1.TestSyncAPI.func3()
      /Users/yanqing11/test/go/sync1/pool_test.go:23 +0x38

Previous write at 0x00c42010a380 by goroutine 34:
  _/Users/yanqing11/test/go/sync1.(*Pool).Put()
      /Users/yanqing11/test/go/sync1/pool.go:109 +0x2ad
  _/Users/yanqing11/test/go/sync1.TestSyncAPI.func1()
      /Users/yanqing11/test/go/sync1/pool_test.go:14 +0x5e

Goroutine 36 (running) created at:
  _/Users/yanqing11/test/go/sync1.TestSyncAPI()
      /Users/yanqing11/test/go/sync1/pool_test.go:22 +0x155
  testing.tRunner()
      /Users/yanqing11/dev/go/src/testing/testing.go:777 +0x16d

Goroutine 34 (finished) created at:
  _/Users/yanqing11/test/go/sync1.TestSyncAPI()
      /Users/yanqing11/test/go/sync1/pool_test.go:12 +0xfd
  testing.tRunner()
      /Users/yanqing11/dev/go/src/testing/testing.go:777 +0x16d
==================
--- FAIL: TestSyncAPI (0.00s)
testing.go:730: race detected during execution of test
=== RUN   TestSyncAPI2
--- PASS: TestSyncAPI2 (0.00s)
=== RUN   TestSyncAPI
--- PASS: TestSyncAPI (0.00s)
=== RUN   TestSyncAPI2
--- PASS: TestSyncAPI2 (0.00s)
FAIL
FAIL _/Users/yanqing11/test/go/sync1 0.025s

2. the test case using a pointer of Pool, the test case code is also in the 
gist. 
https://gist.github.com/lrita/efa8c4ae555b4b7cceee29b4ed819652#file-pool_test-go
 

Thanks for your reply.

在 2018年8月24日星期五 UTC+8下午12:41:17,Dave Cheney写道:
>
> Hi,
>
> Can you please do two things to help with this error report.
>
> 1. Please include the entire data race report -- we need this to match up 
> the line with the source code you've provided in the gist
> 2. Please double check that you are not copying a your sync.Pool type by 
> value, this can happen if you have a type declared on sync.Pool, not 
> *sync.Pool, or it could happen if you do something like this
>
> var x sync.Pool
> y := x
>
> Thanks
>
> Dave
>
> On Friday, 24 August 2018 13:46:10 UTC+10, nea...@gmail.com wrote:
>>
>> Hi lan,
>>
>> The sync.Pool has memory accesses in per-p private storage. Why it not 
>> reports `DATA RACE`, but it reports when I copy those code outside stdlib?
>> I'm confused about this, or there is something wrong in 
>> https://gist.github.com/lrita/efa8c4ae555b4b7cceee29b4ed819652 
>> Thanks.
>>
>> 在 2018年8月24日星期五 UTC+8上午4:36:06,Ian Lance Taylor写道:
>>>
>>> On Thu, Aug 23, 2018 at 12:43 AM,  <buaa...@gmail.com> wrote: 
>>> > package main 
>>> > 
>>> > import "runtime" 
>>> > 
>>> > var a int 
>>> > 
>>> > func calc() { 
>>> >     for i := 0; i < 10; i++ { 
>>> >         go func() { 
>>> >             for { 
>>> >                 runtime.RaceDisable() 
>>> >                 a++ 
>>> >                 runtime.RaceEnable() 
>>> >             } 
>>> >         }() 
>>> > 
>>> >     } 
>>> > } 
>>> > 
>>> > func main() { 
>>> >     calc() 
>>> > } 
>>> > 
>>> > go run -race a.go 
>>>
>>> Thanks for the example.  As the docs for runtime.RaceDisable say, it 
>>> only applies to synchronization events, like mutex locks.  It doesn't 
>>> apply to memory accesses. 
>>>
>>> Ian 
>>>
>>>
>>> > 在 2018年8月22日星期三 UTC+8下午10:34:35,Ian Lance Taylor写道: 
>>> >> 
>>> >> On Wed, Aug 22, 2018 at 3:25 AM,  <nea...@gmail.com> wrote: 
>>> >> > 
>>> >> > When I copy the sync.Pool's source code in a repo, and using 
>>> >> > `//go:linkname` 
>>> >> > link those runtime functions manually. 
>>> >> > When I run `go test -race`, it reports `DATA RACE`. 
>>> >> > But the sync.Pool with the same test case does not report  `DATA 
>>> RACE`. 
>>> >> > 
>>> >> > Does runtime.RaceDisable not work in non-std library ? 
>>> >> 
>>> >> It should work.  I think you'll have to show us your code. 
>>> >> 
>>> >> Ian 
>>> > 
>>> > -- 
>>> > You received this message because you are subscribed to the Google 
>>> Groups 
>>> > "golang-nuts" group. 
>>> > To unsubscribe from this group and stop receiving emails from it, send 
>>> an 
>>> > email to golang-nuts...@googlegroups.com. 
>>> > For more options, visit https://groups.google.com/d/optout. 
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to