Work on timer teardown + bug fixes
Added waitgroups to peer struct for routine start / stop synchronisation
This commit is contained in:
+11
-7
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user