Skip to content
This repository has been archived by the owner on May 26, 2022. It is now read-only.

Race condition in allowWindowIncrease #260

Closed
Tracked by #7
mudler opened this issue Feb 6, 2022 · 1 comment · Fixed by #259
Closed
Tracked by #7

Race condition in allowWindowIncrease #260

mudler opened this issue Feb 6, 2022 · 1 comment · Fixed by #259

Comments

@mudler
Copy link
Contributor

mudler commented Feb 6, 2022

Getting the following data race while pinning to libp2p 0.18.0-rc3:

WARNING: DATA RACE
Write at 0x00c00795b740 by goroutine 1649:
  runtime.mapassign()
      /opt/hostedtoolcache/go/1.16.13/x64/src/runtime/map.go:571 +0x0
  github.com/libp2p/go-libp2p-quic-transport.(*transport).addConn()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-quic-transport@v0.16.0/transport.go:263 +0x95
  github.com/libp2p/go-libp2p-quic-transport.(*transport).Dial()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-quic-transport@v0.16.0/transport.go:257 +0xcb6
  github.com/libp2p/go-libp2p-swarm.(*Swarm).dialAddr()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-swarm@v0.10.1/swarm_dial.go:701 +0x284
  github.com/libp2p/go-libp2p-swarm.(*Swarm).dialAddr-fm()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-swarm@v0.10.1/swarm_dial.go:689 +0xa4
  github.com/libp2p/go-libp2p-swarm.(*dialLimiter).executeDial()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-swarm@v0.10.1/limiter.go:219 +0x24b

Previous read at 0x00c00795b740 by goroutine 2342:
  runtime.mapaccess2()
      /opt/hostedtoolcache/go/1.16.13/x64/src/runtime/map.go:452 +0x0
  github.com/libp2p/go-libp2p-quic-transport.(*transport).allowWindowIncrease()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-quic-transport@v0.16.0/transport.go:384 +0x7e
  github.com/libp2p/go-libp2p-quic-transport.(*transport).allowWindowIncrease-fm()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-quic-transport@v0.16.0/transport.go:379 +0x68
  github.com/lucas-clemente/quic-go.(*session).preSetup.func1()
      /home/runner/go/pkg/mod/github.com/lucas-clemente/quic-go@v0.25.0/session.go:513 +0xd6
  github.com/lucas-clemente/quic-go/internal/flowcontrol.(*connectionFlowController).EnsureMinimumWindowSize()
      /home/runner/go/pkg/mod/github.com/lucas-clemente/quic-go@v0.25.0/internal/flowcontrol/connection_flow_controller.go:91 +0x305
  github.com/lucas-clemente/quic-go/internal/flowcontrol.(*streamFlowController).GetWindowUpdate()
      /home/runner/go/pkg/mod/github.com/lucas-clemente/quic-go@v0.25.0/internal/flowcontrol/stream_flow_controller.go:145 +0x2e1
  github.com/lucas-clemente/quic-go.(*receiveStream).getWindowUpdate()
      /home/runner/go/pkg/mod/github.com/lucas-clemente/quic-go@v0.25.0/receive_stream.go:314 +0x61
  github.com/lucas-clemente/quic-go.(*stream).getWindowUpdate()
      <autogenerated>:1 +0x44
  github.com/lucas-clemente/quic-go.(*windowUpdateQueue).QueueAll()
      /home/runner/go/pkg/mod/github.com/lucas-clemente/quic-go@v0.25.0/window_update_queue.go:61 +0x1d2
  github.com/lucas-clemente/quic-go.(*session).sendPacket()
      /home/runner/go/pkg/mod/github.com/lucas-clemente/quic-go@v0.25.0/session.go:1764 +0xbe
  github.com/lucas-clemente/quic-go.(*session).sendPackets()
      /home/runner/go/pkg/mod/github.com/lucas-clemente/quic-go@v0.25.0/session.go:1687 +0x3f4
  github.com/lucas-clemente/quic-go.(*session).run()
      /home/runner/go/pkg/mod/github.com/lucas-clemente/quic-go@v0.25.0/session.go:690 +0x6e4
  github.com/lucas-clemente/quic-go.(*client).dial.func1()
      /home/runner/go/pkg/mod/github.com/lucas-clemente/quic-go@v0.25.0/client.go:302 +0x65

Goroutine 1649 (running) created at:
  github.com/libp2p/go-libp2p-swarm.(*dialLimiter).addCheckFdLimit()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-swarm@v0.10.1/limiter.go:169 +0x2b6
  github.com/libp2p/go-libp2p-swarm.(*dialLimiter).addCheckPeerLimit()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-swarm@v0.10.1/limiter.go:183 +0x7b5
  github.com/libp2p/go-libp2p-swarm.(*dialLimiter).AddDialJob()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-swarm@v0.10.1/limiter.go:194 +0x179
  github.com/libp2p/go-libp2p-swarm.(*Swarm).limitedDial()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-swarm@v0.10.1/swarm_dial.go:679 +0x1e4
  github.com/libp2p/go-libp2p-swarm.(*Swarm).dialNextAddr()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-swarm@v0.10.1/swarm_dial.go:585 +0xfa
  github.com/libp2p/go-libp2p-swarm.(*Swarm).dialWorkerLoop()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-swarm@v0.10.1/swarm_dial.go:479 +0x57b
  github.com/libp2p/go-libp2p-swarm.(*Swarm).dialWorkerLoop-fm()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-swarm@v0.10.1/swarm_dial.go:297 +0x68

Goroutine 2342 (running) created at:
  github.com/lucas-clemente/quic-go.(*client).dial()
      /home/runner/go/pkg/mod/github.com/lucas-clemente/quic-go@v0.25.0/client.go:301 +0x9f5
  github.com/lucas-clemente/quic-go.dialContext()
      /home/runner/go/pkg/mod/github.com/lucas-clemente/quic-go@v0.25.0/client.go:217 +0x3fe
  github.com/lucas-clemente/quic-go.DialContext()
      /home/runner/go/pkg/mod/github.com/lucas-clemente/quic-go@v0.25.0/client.go:176 +0xd1
  github.com/libp2p/go-libp2p-quic-transport.(*transport).Dial()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-quic-transport@v0.16.0/transport.go:218 +0x854
  github.com/libp2p/go-libp2p-swarm.(*Swarm).dialAddr()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-swarm@v0.10.1/swarm_dial.go:701 +0x284
  github.com/libp2p/go-libp2p-swarm.(*Swarm).dialAddr-fm()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-swarm@v0.10.1/swarm_dial.go:689 +0xa4
  github.com/libp2p/go-libp2p-swarm.(*dialLimiter).executeDial()
      /home/runner/go/pkg/mod/github.com/libp2p/go-libp2p-swarm@v0.10.1/limiter.go:219 +0x24b
==================

This is the go.mod: mudler/edgevpn@1510703
Failure here: https://github.com/mudler/edgevpn/runs/5085834866?check_suite_focus=true
PR: #259

@mudler
Copy link
Contributor Author

mudler commented Feb 6, 2022

#259 seems to fix the above, although seems I'm getting new dataraces: https://github.com/mudler/edgevpn/runs/5085984535?check_suite_focus=true (still have to debug)

@marten-seemann marten-seemann changed the title Race condition in go-libp2p-swarm Race condition in allowWindowIncrease Feb 7, 2022
@marten-seemann marten-seemann transferred this issue from libp2p/go-libp2p Feb 7, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant