path: root/device/send.go
diff options
authorJosh Bleecher Snyder <josh@tailscale.com>2020-12-18 16:32:46 -0800
committerJason A. Donenfeld <Jason@zx2c4.com>2021-01-07 14:49:44 +0100
commitb42e32047d16cc4389ef63550e525c7b08320172 (patch)
tree3321c5f3bce9fded5c598923f167bc2273535734 /device/send.go
parentdevice: remove QueueInboundElement leak with stopped peers (diff)
device: call wg.Add outside the goroutine
One of the first rules of WaitGroups is that you call wg.Add outside of a goroutine, not inside it. Fix this embarrassing mistake. This prevents an extremely rare race condition (2 per 100,000 runs) which could occur when attempting to start a new peer concurrently with shutting down a device. Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
Diffstat (limited to 'device/send.go')
1 files changed, 0 insertions, 3 deletions
diff --git a/device/send.go b/device/send.go
index c75d23e..55df4b3 100644
--- a/device/send.go
+++ b/device/send.go
@@ -352,9 +352,6 @@ func (peer *Peer) RoutineNonce() {
device := peer.device
logDebug := device.log.Debug
- // We write to the encryption queue; keep it alive until we are done.
- device.queue.encryption.wg.Add(1)
flush := func() {
for {
select {