Work on timer teardown + bug fixes

Added waitgroups to peer struct for routine
start / stop synchronisation
This commit is contained in:
Mathias Hall-Andersen
2018-01-13 09:00:37 +01:00
parent d73f960aab
commit 1dd590b91b
8 changed files with 102 additions and 47 deletions
+11 -7
View File
@@ -4,7 +4,6 @@ import (
"bytes"
"encoding/binary"
"math/rand"
"sync"
"sync/atomic"
"time"
)
@@ -182,7 +181,10 @@ func (peer *Peer) sendNewHandshake() error {
return err
}
func (peer *Peer) RoutineTimerHandler(ready *sync.WaitGroup) {
func (peer *Peer) RoutineTimerHandler() {
defer peer.routines.stopping.Done()
device := peer.device
logInfo := device.log.Info
@@ -203,15 +205,20 @@ func (peer *Peer) RoutineTimerHandler(ready *sync.WaitGroup) {
peer.timer.keepalivePersistent.Reset(duration)
}
// signal that timers are reset
// signal synchronised setup complete
ready.Done()
peer.routines.starting.Done()
// handle timer events
for {
select {
/* stopping */
case <-peer.routines.stop.Wait():
return
/* timers */
// keep-alive
@@ -312,9 +319,6 @@ func (peer *Peer) RoutineTimerHandler(ready *sync.WaitGroup) {
/* signals */
case <-peer.signal.stop.Wait():
return
case <-peer.signal.handshakeBegin.Wait():
peer.signal.handshakeBegin.Disable()