Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/gc: racewalk doubles expressions #4245

Closed
dvyukov opened this issue Oct 15, 2012 · 1 comment
Closed

cmd/gc: racewalk doubles expressions #4245

dvyukov opened this issue Oct 15, 2012 · 1 comment

Comments

@dvyukov
Copy link
Member

dvyukov commented Oct 15, 2012

14628:3e39b4ebe5b1 tip

Can be reproduced on:
go test -bench=.* -benchtime=.1s -cpu=2 net/rpc

WARNING: DATA RACE
Write by goroutine 8:
  encoding/gob.decInt64()
      /usr/local/go/src/pkg/encoding/gob/decode.go:287 +0xcb
  encoding/gob.(*Decoder).decodeStruct()
      /usr/local/go/src/pkg/encoding/gob/decode.go:518 +0x336
  encoding/gob.(*Decoder).decodeValue()
      /usr/local/go/src/pkg/encoding/gob/decode.go:1233 +0x3a3
  encoding/gob.(*Decoder).DecodeValue()
      /usr/local/go/src/pkg/encoding/gob/decoder.go:225 +0x1a1
  encoding/gob.(*Decoder).Decode()
      /usr/local/go/src/pkg/encoding/gob/decoder.go:202 +0x239
  net/rpc.(*gobClientCodec).ReadResponseBody()
      /usr/local/go/src/pkg/net/rpc/client.go:218 +0x54
  net/rpc.(*Client).input()
      /usr/local/go/src/pkg/net/rpc/client.go:141 +0x8c6

Previous read by goroutine 9:
  net/rpc.func·003()
      /usr/local/go/src/pkg/net/rpc/server_test.go:526 +0x1a7

Goroutine 8 (running) created at:
  net/rpc.NewClientWithCodec()
      /usr/local/go/src/pkg/net/rpc/client.go:192 +0xb7
  net/rpc.NewClient()
      /usr/local/go/src/pkg/net/rpc/client.go:182 +0x19a
  net/rpc.Dial()
      /usr/local/go/src/pkg/net/rpc/client.go:265 +0xac
  net/rpc.dialDirect()
      /usr/local/go/src/pkg/net/rpc/server_test.go:430 +0x4a
  net/rpc.benchmarkEndToEnd()
      /usr/local/go/src/pkg/net/rpc/server_test.go:505 +0xa9
  net/rpc.BenchmarkEndToEnd()
      /usr/local/go/src/pkg/net/rpc/server_test.go:584 +0x33
  testing.(*B).runN()
      /usr/local/go/src/pkg/testing/benchmark.go:111 +0xb2
  testing.(*B).launch()
      /usr/local/go/src/pkg/testing/benchmark.go:179 +0x5c

Goroutine 9 (finished) created at:
  net/rpc.benchmarkEndToEnd()
      /usr/local/go/src/pkg/net/rpc/server_test.go:531 +0x34c
  net/rpc.BenchmarkEndToEnd()
      /usr/local/go/src/pkg/net/rpc/server_test.go:584 +0x33
  testing.(*B).runN()
      /usr/local/go/src/pkg/testing/benchmark.go:111 +0xb2
  testing.(*B).launch()
      /usr/local/go/src/pkg/testing/benchmark.go:179 +0x5c
==================

The crux is (2 calls of makechan() and Client.Go()):

        call := <-client.Go(serviceMethod, args, reply, make(chan *Call, 1)).Done
  441751:       48 c7 04 24 40 6c 66    movq   $0x666c40,(%rsp)
  441758:       00 
  441759:       48 c7 44 24 08 01 00    movq   $0x1,0x8(%rsp)
  441760:       00 00 
  441762:       e8 29 17 fc ff          callq  402e90 <runtime.makechan>
  441767:       48 8b 5c 24 10          mov    0x10(%rsp),%rbx
  44176c:       48 89 5c 24 38          mov    %rbx,0x38(%rsp)
  441771:       48 8b 5c 24 58          mov    0x58(%rsp),%rbx
  441776:       48 89 1c 24             mov    %rbx,(%rsp)
  44177a:       48 8b 5c 24 60          mov    0x60(%rsp),%rbx
  44177f:       48 89 5c 24 08          mov    %rbx,0x8(%rsp)
  441784:       48 8b 5c 24 68          mov    0x68(%rsp),%rbx
  441789:       48 89 5c 24 10          mov    %rbx,0x10(%rsp)
  44178e:       48 8b 5c 24 70          mov    0x70(%rsp),%rbx
  441793:       48 89 5c 24 18          mov    %rbx,0x18(%rsp)
  441798:       48 8b 5c 24 78          mov    0x78(%rsp),%rbx
  44179d:       48 89 5c 24 20          mov    %rbx,0x20(%rsp)
  4417a2:       48 8b 9c 24 80 00 00    mov    0x80(%rsp),%rbx
  4417a9:       00 
  4417aa:       48 89 5c 24 28          mov    %rbx,0x28(%rsp)
  4417af:       48 8b 9c 24 88 00 00    mov    0x88(%rsp),%rbx
  4417b6:       00 
  4417b7:       48 89 5c 24 30          mov    %rbx,0x30(%rsp)
  4417bc:       e8 df fc ff ff          callq  4414a0 <net/rpc.(*Client).Go>
  4417c1:       48 8b 5c 24 40          mov    0x40(%rsp),%rbx
  4417c6:       48 89 1c 24             mov    %rbx,(%rsp)
  4417ca:       48 83 04 24 40          addq   $0x40,(%rsp)
  4417cf:       e8 1c 24 fd ff          callq  413bf0 <runtime.raceread>
  4417d4:       48 c7 04 24 40 6c 66    movq   $0x666c40,(%rsp)
  4417db:       00 
  4417dc:       48 c7 44 24 08 01 00    movq   $0x1,0x8(%rsp)
  4417e3:       00 00 
  4417e5:       e8 a6 16 fc ff          callq  402e90 <runtime.makechan>
  4417ea:       48 8b 6c 24 10          mov    0x10(%rsp),%rbp
  4417ef:       48 89 6c 24 38          mov    %rbp,0x38(%rsp)
  4417f4:       48 8b 6c 24 58          mov    0x58(%rsp),%rbp
  4417f9:       48 89 2c 24             mov    %rbp,(%rsp)
  4417fd:       48 8b 6c 24 60          mov    0x60(%rsp),%rbp
  441802:       48 89 6c 24 08          mov    %rbp,0x8(%rsp)
  441807:       48 8b 6c 24 68          mov    0x68(%rsp),%rbp
  44180c:       48 89 6c 24 10          mov    %rbp,0x10(%rsp)
  441811:       48 8b 6c 24 70          mov    0x70(%rsp),%rbp
  441816:       48 89 6c 24 18          mov    %rbp,0x18(%rsp)
  44181b:       48 8b 6c 24 78          mov    0x78(%rsp),%rbp
  441820:       48 89 6c 24 20          mov    %rbp,0x20(%rsp)
  441825:       48 8b ac 24 80 00 00    mov    0x80(%rsp),%rbp
  44182c:       00 
  44182d:       48 89 6c 24 28          mov    %rbp,0x28(%rsp)
  441832:       48 8b ac 24 88 00 00    mov    0x88(%rsp),%rbp
  441839:       00 
  44183a:       48 89 6c 24 30          mov    %rbp,0x30(%rsp)
  44183f:       e8 5c fc ff ff          callq  4414a0 <net/rpc.(*Client).Go>
  441844:       48 8b 5c 24 40          mov    0x40(%rsp),%rbx
  441849:       48 8b 6b 40             mov    0x40(%rbx),%rbp
  44184d:       48 89 6c 24 08          mov    %rbp,0x8(%rsp)
  441852:       48 c7 04 24 40 6c 66    movq   $0x666c40,(%rsp)
  441859:       00 
  44185a:       e8 d1 22 fc ff          callq  403b30 <runtime.chanrecv1>
  44185f:       48 8b 5c 24 10          mov    0x10(%rsp),%rbx
  441864:       48 89 5c 24 48          mov    %rbx,0x48(%rsp)
@dvyukov
Copy link
Member Author

dvyukov commented Nov 7, 2012

Comment 1:

This issue was closed by revision abb313f.

Status changed to Fixed.

@rsc rsc added this to the Go1.1 milestone Apr 14, 2015
@rsc rsc removed the go1.1 label Apr 14, 2015
@golang golang locked and limited conversation to collaborators Jun 24, 2016
This issue was closed.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants