summaryrefslogtreecommitdiffhomepage
path: root/device/peer.go
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josh@tailscale.com>2021-02-08 10:01:35 -0800
committerJosh Bleecher Snyder <josh@tailscale.com>2021-02-08 10:32:07 -0800
commit15810daa2283e3cfe0c811c3632f053274f31950 (patch)
tree917b946fbd80604c7a2bd0b214db7ecf80ea9786 /device/peer.go
parentd840445e9bdd4f4db3538c9caf93d797cc987fbc (diff)
device: separate timersInit from timersStart
timersInit sets up the timers. It need only be done once per peer. timersStart does the work to prepare the timers for a newly running peer. It needs to be done every time a peer starts. Separate the two and call them in the appropriate places. This prevents data races on the peer's timers fields when starting and stopping peers. Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
Diffstat (limited to 'device/peer.go')
-rw-r--r--device/peer.go3
1 files changed, 2 insertions, 1 deletions
diff --git a/device/peer.go b/device/peer.go
index abe8a08..3e4f4ec 100644
--- a/device/peer.go
+++ b/device/peer.go
@@ -107,6 +107,7 @@ func (device *Device) NewPeer(pk NoisePublicKey) (*Peer, error) {
device.peers.empty.Set(false)
// start peer
+ peer.timersInit()
if peer.device.isUp() {
peer.Start()
}
@@ -183,7 +184,7 @@ func (peer *Peer) Start() {
}
peer.device.queue.encryption.wg.Add(1) // keep encryption queue open for our writes
- peer.timersInit()
+ peer.timersStart()
go peer.RoutineSequentialSender()
go peer.RoutineSequentialReceiver()