Просмотр исходного кода

Fix: correctly handle timeout config of 0

Rod Hynes 8 лет назад
Родитель
Сommit
718bc6b0df
1 измененных файлов с 29 добавлено и 16 удалено
  1. 29 16
      psiphon/tunnel.go

+ 29 - 16
psiphon/tunnel.go

@@ -224,23 +224,36 @@ func (tunnel *Tunnel) Activate(
 			}
 		}()
 
-		timer := time.NewTimer(
-			time.Second *
-				time.Duration(
-					*tunnel.config.TunnelSshKeepAliveProbeTimeoutSeconds))
-
 		var result newServerContextResult
-		select {
-		case result = <-resultChannel:
-		case <-timer.C:
-			result.err = errors.New("timed out")
-			// Interrupt the Activate goroutine and await its completion.
-			tunnel.Close(true)
-			<-resultChannel
-		case <-shutdownBroadcast:
-			result.err = errors.New("shutdown")
-			tunnel.Close(true)
-			<-resultChannel
+
+		if *tunnel.config.TunnelSshKeepAliveProbeTimeoutSeconds > 0 {
+
+			timer := time.NewTimer(
+				time.Second *
+					time.Duration(
+						*tunnel.config.TunnelSshKeepAliveProbeTimeoutSeconds))
+
+			select {
+			case result = <-resultChannel:
+			case <-timer.C:
+				result.err = errors.New("timed out")
+				// Interrupt the Activate goroutine and await its completion.
+				tunnel.Close(true)
+				<-resultChannel
+			case <-shutdownBroadcast:
+				result.err = errors.New("shutdown")
+				tunnel.Close(true)
+				<-resultChannel
+			}
+		} else {
+
+			select {
+			case result = <-resultChannel:
+			case <-shutdownBroadcast:
+				result.err = errors.New("shutdown")
+				tunnel.Close(true)
+				<-resultChannel
+			}
 		}
 
 		if result.err != nil {