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

data race #44

Closed
ghost opened this issue Oct 24, 2017 · 4 comments
Closed

data race #44

ghost opened this issue Oct 24, 2017 · 4 comments
Labels

Comments

@ghost
Copy link

ghost commented Oct 24, 2017

Whenever try receive smt data race pops up

croc -send connect.go

                                ,_
                               >' )
   croc version                ( ( \
                                || \
                 /^^^^\         ||
    /^^\________/0     \        ||
   (                    `~+++,,_||__,,++~^^^^^^^
 ...V^V^V^V^V^V^\...............................


Enter receive code: 4-octavia-lecture-india
==================
WARNING: DATA RACE
Write at 0x00c4200b8190 by goroutine 12:
  reflect.Value.SetString()
      /usr/local/Cellar/go/1.9.1/libexec/src/reflect/value.go:1531 +0x64
  encoding/json.(*decodeState).literalStore()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:939 +0x2868
  encoding/json.(*decodeState).literal()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:802 +0x16c
  encoding/json.(*decodeState).value()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:408 +0x186
  encoding/json.(*decodeState).object()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:736 +0x169d
  encoding/json.(*decodeState).value()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:405 +0x149
  encoding/json.(*decodeState).unmarshal()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:187 +0x2db
  encoding/json.Unmarshal()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:107 +0x20e
  main.(*Connection).runClient.func1()
      /Users/callmeanyhow/go/src/croc/connect.go:314 +0x11a9

Previous read at 0x00c4200b8190 by goroutine 10:
  runtime.convT2E()
      /usr/local/Cellar/go/1.9.1/libexec/src/runtime/iface.go:201 +0x0
  main.(*Connection).runClient.func1()
      /Users/callmeanyhow/go/src/croc/connect.go:320 +0x12cd

Goroutine 12 (running) created at:
  main.(*Connection).runClient()
      /Users/callmeanyhow/go/src/croc/connect.go:231 +0x510
  main.(*Connection).Run()
      /Users/callmeanyhow/go/src/croc/connect.go:206 +0x80b
  main.main()
      /Users/callmeanyhow/go/src/croc/main.go:66 +0x573

Goroutine 10 (running) created at:
  main.(*Connection).runClient()
      /Users/callmeanyhow/go/src/croc/connect.go:231 +0x510
  main.(*Connection).Run()
      /Users/callmeanyhow/go/src/croc/connect.go:206 +0x80b
  main.main()
      /Users/callmeanyhow/go/src/croc/main.go:66 +0x573
==================
==================
WARNING: DATA RACE
Write at 0x00c4200b81a0 by goroutine 12:
  reflect.Value.SetInt()
      /usr/local/Cellar/go/1.9.1/libexec/src/reflect/value.go:1425 +0x107
  encoding/json.(*decodeState).literalStore()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:989 +0x213c
  encoding/json.(*decodeState).literal()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:802 +0x16c
  encoding/json.(*decodeState).value()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:408 +0x186
  encoding/json.(*decodeState).object()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:736 +0x169d
  encoding/json.(*decodeState).value()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:405 +0x149
  encoding/json.(*decodeState).unmarshal()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:187 +0x2db
  encoding/json.Unmarshal()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:107 +0x20e
  main.(*Connection).runClient.func1()
      /Users/callmeanyhow/go/src/croc/connect.go:314 +0x11a9

Previous read at 0x00c4200b81a0 by goroutine 10:
  runtime.convT2E()
      /usr/local/Cellar/go/1.9.1/libexec/src/runtime/iface.go:201 +0x0
  main.(*Connection).runClient.func1()
      /Users/callmeanyhow/go/src/croc/connect.go:320 +0x12cd

Goroutine 12 (running) created at:
  main.(*Connection).runClient()
      /Users/callmeanyhow/go/src/croc/connect.go:231 +0x510
  main.(*Connection).Run()
      /Users/callmeanyhow/go/src/croc/connect.go:206 +0x80b
  main.main()
      /Users/callmeanyhow/go/src/croc/main.go:66 +0x573

Goroutine 10 (running) created at:
  main.(*Connection).runClient()
      /Users/callmeanyhow/go/src/croc/connect.go:231 +0x510
  main.(*Connection).Run()
      /Users/callmeanyhow/go/src/croc/connect.go:206 +0x80b
  main.main()
      /Users/callmeanyhow/go/src/croc/main.go:66 +0x573
==================
==================
WARNING: DATA RACE
Write at 0x00c4200b81c8 by goroutine 12:
  reflect.Value.SetBool()
      /usr/local/Cellar/go/1.9.1/libexec/src/reflect/value.go:1364 +0x60
  encoding/json.(*decodeState).literalStore()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:905 +0x10f7
  encoding/json.(*decodeState).literal()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:802 +0x16c
  encoding/json.(*decodeState).value()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:408 +0x186
  encoding/json.(*decodeState).object()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:736 +0x169d
  encoding/json.(*decodeState).value()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:405 +0x149
  encoding/json.(*decodeState).unmarshal()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:187 +0x2db
  encoding/json.Unmarshal()
      /usr/local/Cellar/go/1.9.1/libexec/src/encoding/json/decode.go:107 +0x20e
  main.(*Connection).runClient.func1()
      /Users/callmeanyhow/go/src/croc/connect.go:314 +0x11a9

Previous read at 0x00c4200b81c8 by goroutine 10:
  runtime.convT2E()
      /usr/local/Cellar/go/1.9.1/libexec/src/runtime/iface.go:201 +0x0
  main.(*Connection).runClient.func1()
      /Users/callmeanyhow/go/src/croc/connect.go:320 +0x12cd

Goroutine 12 (running) created at:
  main.(*Connection).runClient()
      /Users/callmeanyhow/go/src/croc/connect.go:231 +0x510
  main.(*Connection).Run()
      /Users/callmeanyhow/go/src/croc/connect.go:206 +0x80b
  main.main()
      /Users/callmeanyhow/go/src/croc/main.go:66 +0x573

Goroutine 10 (running) created at:
  main.(*Connection).runClient()
      /Users/callmeanyhow/go/src/croc/connect.go:231 +0x510
  main.(*Connection).Run()
      /Users/callmeanyhow/go/src/croc/connect.go:206 +0x80b
  main.main()
      /Users/callmeanyhow/go/src/croc/main.go:66 +0x573
==================
Overwriting file connect.go (16 kB)
ok? (y/n): y
==================
WARNING: DATA RACE
Write at 0x00c4200142f9 by goroutine 7:
  main.(*Connection).runClient.func1()
      /Users/callmeanyhow/go/src/croc/connect.go:351 +0x1c49

Previous read at 0x00c4200142f9 by goroutine 12:
  main.(*Connection).runClient.func1()
      /Users/callmeanyhow/go/src/croc/connect.go:355 +0x13ab

Goroutine 7 (running) created at:
  main.(*Connection).runClient()
      /Users/callmeanyhow/go/src/croc/connect.go:231 +0x510
  main.(*Connection).Run()
      /Users/callmeanyhow/go/src/croc/connect.go:206 +0x80b
  main.main()
      /Users/callmeanyhow/go/src/croc/main.go:66 +0x573

Goroutine 12 (running) created at:
  main.(*Connection).runClient()
      /Users/callmeanyhow/go/src/croc/connect.go:231 +0x510
  main.(*Connection).Run()
      /Users/callmeanyhow/go/src/croc/connect.go:206 +0x80b
  main.main()
      /Users/callmeanyhow/go/src/croc/main.go:66 +0x573
==================


Receiving (<-185.9.230.10123671)..
   0s [====================================================================] 100%
   0s [====================================================================] 100%
   0s [====================================================================] 100%
   0s [====================================================================] 100%
   0s [====================================================================] 100%
   0s [====================================================================] 100%
Found 4 data race(s)
@ghost
Copy link
Author

ghost commented Oct 24, 2017

one more case

croc

                                ,_
                               >' )
   croc version                ( ( \
                                || \
                 /^^^^\         ||
    /^^\________/0     \        ||
   (                    `~+++,,_||__,,++~^^^^^^^
 ...V^V^V^V^V^V^\...............................


Enter receive code: 4-happy-diego-tribune
The specifed code is already in use by a sender.
==================
WARNING: DATA RACE
Write at 0x00c42008428a by goroutine 11:
  main.(*Connection).runClient.func1()
      /Users/callmeanyhow/go/src/croc/connect.go:298 +0xd86

Previous write at 0x00c42008428a by goroutine 7:
  main.(*Connection).runClient.func1()
      /Users/callmeanyhow/go/src/croc/connect.go:298 +0xd86

Goroutine 11 (running) created at:
  main.(*Connection).runClient()
      /Users/callmeanyhow/go/src/croc/connect.go:231 +0x510
  main.(*Connection).Run()
      /Users/callmeanyhow/go/src/croc/connect.go:206 +0x80b
  main.main()
      /Users/callmeanyhow/go/src/croc/main.go:66 +0x573

Goroutine 7 (finished) created at:
  main.(*Connection).runClient()
      /Users/callmeanyhow/go/src/croc/connect.go:231 +0x510
  main.(*Connection).Run()
      /Users/callmeanyhow/go/src/croc/connect.go:206 +0x80b
  main.main()
      /Users/callmeanyhow/go/src/croc/main.go:66 +0x573
==================
Found 1 data race(s)

@schollz
Copy link
Owner

schollz commented Oct 24, 2017

Whoa! How did you get these errors, just by go get and then running? I've never seen errors like these before.

@ghost
Copy link
Author

ghost commented Oct 24, 2017

Almost) I used standard golang race detector go install -race .

@schollz
Copy link
Owner

schollz commented Oct 24, 2017

Okay, thanks. The problem is how data is being shared. Namely these contain switches: https://github.com/schollz/croc/blob/master/connect.go#L224-L228. These switches can be turned off/on simultaneously by threads which causes data racing. It should be fixed now since I added a sync.RWMutex to hold these switches.

@schollz schollz closed this as completed Oct 24, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant