mirror of
https://git.zx2c4.com/wireguard-go
synced 2025-10-06 09:07:03 +08:00
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:
28
timers.go
28
timers.go
@@ -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,
|
||||
|
Reference in New Issue
Block a user