]> git.ipfire.org Git - thirdparty/wireguard-go.git/commit
device: wait for routines to stop before removing peers
authorDmytro Shynkevych <dmytro@tailscale.com>
Wed, 24 Jun 2020 05:35:41 +0000 (01:35 -0400)
committerDavid Crawshaw <crawshaw@tailscale.com>
Sat, 4 Jul 2020 10:29:31 +0000 (20:29 +1000)
commit4369db522b3fd7adc28a2a82b89315a6f3edbcc4
treee6d62689017864d23334de818b5fa8c8dc380d9b
parentb84f1d4db25e6e7de29551d3fd9c3c10e0b731e1
device: wait for routines to stop before removing peers

Peers are currently removed after Device's goroutines are signaled to stop,
but without waiting for them to actually do so, which is racy.

For example, RoutineHandshake may be in Peer.SendKeepalive
when the corresponding peer is removed, which closes its nonce channel.
This causes a send on a closed channel, as observed in tailscale/tailscale#487.

This patch seems to be the correct synchronizing action:
Peer's goroutines are receivers and handle channel closure gracefully,
so Device's goroutines are the ones that should be fully stopped first.

Signed-Off-By: Dmytro Shynkevych <dmytro@tailscale.com>
device/device.go