Explorar el Código

Don't repeatedly signal due to the same condition

Rod Hynes hace 8 años
padre
commit
ff01184cd5
Se han modificado 1 ficheros con 11 adiciones y 2 borrados
  1. 11 2
      psiphon/packetTunnelTransport.go

+ 11 - 2
psiphon/packetTunnelTransport.go

@@ -286,6 +286,8 @@ func (p *PacketTunnelTransport) monitor() {
 	monitorTicker := time.NewTicker(1 * time.Second)
 	defer monitorTicker.Stop()
 
+	lastSignalTime := monotime.Time(0)
+
 	for {
 		select {
 		case <-p.runContext.Done():
@@ -309,18 +311,25 @@ func (p *PacketTunnelTransport) monitor() {
 				lastWriteStart.Sub(lastWriteComplete) > PACKET_TUNNEL_PROBE_SLOW_WRITE) ||
 				(lastWriteComplete.Sub(lastReadComplete) > PACKET_TUNNEL_PROBE_SLOW_READ) {
 
+				// Don't keep signalling due to an old condition
+				if lastWriteStart.Add(PACKET_TUNNEL_PROBE_SLOW_WRITE).Before(lastSignalTime) &&
+					lastWriteComplete.Add(PACKET_TUNNEL_PROBE_SLOW_READ).Before(lastSignalTime) {
+
+					break
+				}
+
 				p.channelMutex.Lock()
 				channelTunnel := p.channelTunnel
 				p.channelMutex.Unlock()
 
-				// TODO: store/check last probe signal time to prevent continuous probe signals?
-
 				if channelTunnel != nil {
 					select {
 					case channelTunnel.signalPortForwardFailure <- *new(struct{}):
 					default:
 					}
 				}
+
+				lastSignalTime = monotime.Now()
 			}
 		}
 	}