Skip to content
Snippets Groups Projects
Unverified Commit 0aa9ac90 authored by Daniel Czerwonk's avatar Daniel Czerwonk Committed by GitHub
Browse files

Merge pull request #26 from hikhvar/fix/use-ticker-instead-of-resetting-timer

Use native ticker instead of resetting timer
parents 1ded90f2 91c7675b
No related branches found
No related tags found
No related merge requests found
...@@ -83,7 +83,7 @@ type FSM struct { ...@@ -83,7 +83,7 @@ type FSM struct {
holdTimer *time.Timer holdTimer *time.Timer
keepaliveTime time.Duration keepaliveTime time.Duration
keepaliveTimer *time.Timer keepaliveTimer *time.Ticker
msgRecvCh chan msgRecvMsg msgRecvCh chan msgRecvMsg
msgRecvFailCh chan msgRecvErr msgRecvFailCh chan msgRecvErr
...@@ -124,7 +124,7 @@ func NewFSM(peer *Peer, c config.Peer, rib routingtable.RouteTableClient) *FSM { ...@@ -124,7 +124,7 @@ func NewFSM(peer *Peer, c config.Peer, rib routingtable.RouteTableClient) *FSM {
holdTimer: time.NewTimer(0), holdTimer: time.NewTimer(0),
keepaliveTime: time.Duration(c.KeepAlive), keepaliveTime: time.Duration(c.KeepAlive),
keepaliveTimer: time.NewTimer(0), keepaliveTimer: time.NewTicker(time.Duration(c.KeepAlive)),
routerID: c.RouterID, routerID: c.RouterID,
remote: c.PeerAddress, remote: c.PeerAddress,
...@@ -457,7 +457,10 @@ func (fsm *FSM) openSent() int { ...@@ -457,7 +457,10 @@ func (fsm *FSM) openSent() int {
if fsm.holdTime != 0 { if fsm.holdTime != 0 {
fsm.holdTimer.Reset(time.Second * fsm.holdTime) fsm.holdTimer.Reset(time.Second * fsm.holdTime)
fsm.keepaliveTime = fsm.holdTime / 3 fsm.keepaliveTime = fsm.holdTime / 3
fsm.keepaliveTimer.Reset(time.Second * fsm.keepaliveTime) if fsm.keepaliveTimer != nil {
fsm.keepaliveTimer.Stop()
}
fsm.keepaliveTimer = time.NewTicker(fsm.keepaliveTime * time.Second)
} }
fsm.processOpenOptions(openMsg.OptParams) fsm.processOpenOptions(openMsg.OptParams)
...@@ -623,7 +626,6 @@ func (fsm *FSM) openConfirm() int { ...@@ -623,7 +626,6 @@ func (fsm *FSM) openConfirm() int {
fsm.connectRetryCounter++ fsm.connectRetryCounter++
return fsm.changeState(Idle, fmt.Sprintf("Failed to send keepalive: %v", err)) return fsm.changeState(Idle, fmt.Sprintf("Failed to send keepalive: %v", err))
} }
fsm.keepaliveTimer.Reset(time.Second * fsm.keepaliveTime)
continue continue
case c := <-fsm.conCh: case c := <-fsm.conCh:
if fsm.con2 != nil { if fsm.con2 != nil {
...@@ -750,6 +752,7 @@ func (fsm *FSM) established() int { ...@@ -750,6 +752,7 @@ func (fsm *FSM) established() int {
}()*/ }()*/
for { for {
log.Debug("Iterate established loop.")
select { select {
case e := <-fsm.eventCh: case e := <-fsm.eventCh:
if e == ManualStop { // Event 2 if e == ManualStop { // Event 2
...@@ -774,6 +777,7 @@ func (fsm *FSM) established() int { ...@@ -774,6 +777,7 @@ func (fsm *FSM) established() int {
fsm.connectRetryCounter++ fsm.connectRetryCounter++
return fsm.changeState(Idle, "Holdtimer expired") return fsm.changeState(Idle, "Holdtimer expired")
case <-fsm.keepaliveTimer.C: case <-fsm.keepaliveTimer.C:
err := fsm.sendKeepalive() err := fsm.sendKeepalive()
if err != nil { if err != nil {
stopTimer(fsm.connectRetryTimer) stopTimer(fsm.connectRetryTimer)
...@@ -781,7 +785,6 @@ func (fsm *FSM) established() int { ...@@ -781,7 +785,6 @@ func (fsm *FSM) established() int {
fsm.connectRetryCounter++ fsm.connectRetryCounter++
return fsm.changeState(Idle, fmt.Sprintf("Failed to send keepalive: %v", err)) return fsm.changeState(Idle, fmt.Sprintf("Failed to send keepalive: %v", err))
} }
fsm.keepaliveTimer.Reset(time.Second * fsm.keepaliveTime)
continue continue
case c := <-fsm.conCh: case c := <-fsm.conCh:
c.Close() c.Close()
...@@ -916,9 +919,10 @@ func (fsm *FSM) resetDelayOpenTimer() { ...@@ -916,9 +919,10 @@ func (fsm *FSM) resetDelayOpenTimer() {
} }
func (fsm *FSM) sendKeepalive() error { func (fsm *FSM) sendKeepalive() error {
msg := packet.SerializeKeepaliveMsg()
msg := packet.SerializeKeepaliveMsg()
_, err := fsm.con.Write(msg) _, err := fsm.con.Write(msg)
log.WithError(err).Debug("Send keepalive")
if err != nil { if err != nil {
return fmt.Errorf("Unable to send KEEPALIVE message: %v", err) return fmt.Errorf("Unable to send KEEPALIVE message: %v", err)
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment