Add missing locks and fix debug output, and try to flush queues

Flushing queues on exit is sort of a partial solution, but this could be
better. Really what we want is for no more packets to be enqueued after
isUp is set to false.
This commit is contained in:
Jason A. Donenfeld
2018-05-01 16:59:13 +02:00
parent b34604245e
commit 168ef61a63
5 changed files with 116 additions and 42 deletions

View File

@@ -120,7 +120,7 @@ func (peer *Peer) TimerAnyAuthenticatedPacketTraversal() {
*/
func (peer *Peer) TimerHandshakeComplete() {
peer.signal.handshakeCompleted.Send()
peer.device.log.Info.Println(peer.String(), ": New handshake completed")
peer.device.log.Info.Println(peer.String() + ": New handshake completed")
}
/* Event:
@@ -189,10 +189,12 @@ func (peer *Peer) RoutineTimerHandler() {
logDebug := device.log.Debug
defer func() {
logDebug.Println(peer.String(), ": Routine, Timer handler, Stopped")
logDebug.Println(peer.String() + ": Routine: timer handler - stopped")
peer.routines.stopping.Done()
}()
logDebug.Println(peer.String() + ": Routine: timer handler - started")
// reset all timers
peer.timer.keepalivePassive.Stop()
@@ -207,8 +209,6 @@ func (peer *Peer) RoutineTimerHandler() {
peer.timer.keepalivePersistent.Reset(duration)
}
logDebug.Println("Routine, timer handler, started for peer", peer.String())
// signal synchronised setup complete
peer.routines.starting.Done()
@@ -231,14 +231,14 @@ func (peer *Peer) RoutineTimerHandler() {
interval := peer.persistentKeepaliveInterval
if interval > 0 {
logDebug.Println(peer.String(), ": Send keep-alive (persistent)")
logDebug.Println(peer.String() + ": Send keep-alive (persistent)")
peer.timer.keepalivePassive.Stop()
peer.SendKeepAlive()
}
case <-peer.timer.keepalivePassive.Wait():
logDebug.Println(peer.String(), ": Send keep-alive (passive)")
logDebug.Println(peer.String() + ": Send keep-alive (passive)")
peer.SendKeepAlive()
@@ -250,7 +250,7 @@ func (peer *Peer) RoutineTimerHandler() {
case <-peer.timer.zeroAllKeys.Wait():
logDebug.Println(peer.String(), ": Clear all key-material (timer event)")
logDebug.Println(peer.String() + ": Clear all key-material (timer event)")
hs := &peer.handshake
hs.mutex.Lock()
@@ -283,7 +283,7 @@ func (peer *Peer) RoutineTimerHandler() {
// handshake timers
case <-peer.timer.handshakeNew.Wait():
logInfo.Println(peer.String(), ": Retrying handshake (timer event)")
logInfo.Println(peer.String() + ": Retrying handshake (timer event)")
peer.signal.handshakeBegin.Send()
case <-peer.timer.handshakeTimeout.Wait():
@@ -301,16 +301,16 @@ func (peer *Peer) RoutineTimerHandler() {
err := peer.sendNewHandshake()
if err != nil {
logInfo.Println(peer.String(), ": Failed to send handshake initiation", err)
logInfo.Println(peer.String()+": Failed to send handshake initiation", err)
} else {
logDebug.Println(peer.String(), ": Send handshake initiation (subsequent)")
logDebug.Println(peer.String() + ": Send handshake initiation (subsequent)")
}
case <-peer.timer.handshakeDeadline.Wait():
// clear all queued packets and stop keep-alive
logInfo.Println(peer.String(), ": Handshake negotiation timed-out")
logInfo.Println(peer.String() + ": Handshake negotiation timed-out")
peer.signal.flushNonceQueue.Send()
peer.timer.keepalivePersistent.Stop()
@@ -325,16 +325,16 @@ func (peer *Peer) RoutineTimerHandler() {
err := peer.sendNewHandshake()
if err != nil {
logInfo.Println(peer.String(), ": Failed to send handshake initiation", err)
logInfo.Println(peer.String()+": Failed to send handshake initiation", err)
} else {
logDebug.Println(peer.String(), ": Send handshake initiation (initial)")
logDebug.Println(peer.String() + ": Send handshake initiation (initial)")
}
peer.timer.handshakeDeadline.Reset(RekeyAttemptTime)
case <-peer.signal.handshakeCompleted.Wait():
logInfo.Println(peer.String(), ": Handshake completed")
logInfo.Println(peer.String() + ": Handshake completed")
atomic.StoreInt64(
&peer.stats.lastHandshakeNano,