Преглед изворни кода

lib/connections: Fix KCP from locking up the service (fixes #4072)

Audrius Butkevicius пре 8 година
родитељ
комит
51518490c6
2 измењених фајлова са 5 додато и 0 уклоњено
  1. 3 0
      lib/connections/kcp_dial.go
  2. 2 0
      lib/connections/kcp_listen.go

+ 3 - 0
lib/connections/kcp_dial.go

@@ -61,11 +61,14 @@ func (d *kcpDialer) Dial(id protocol.DeviceID, uri *url.URL) (internalConn, erro
 		conn.Close()
 		conn.Close()
 		return internalConn{}, err
 		return internalConn{}, err
 	}
 	}
+
+	ses.SetDeadline(time.Now().Add(10 * time.Second))
 	stream, err := ses.OpenStream()
 	stream, err := ses.OpenStream()
 	if err != nil {
 	if err != nil {
 		ses.Close()
 		ses.Close()
 		return internalConn{}, err
 		return internalConn{}, err
 	}
 	}
+	ses.SetDeadline(time.Time{})
 
 
 	tc := tls.Client(&sessionClosingStream{stream, ses}, d.tlsCfg)
 	tc := tls.Client(&sessionClosingStream{stream, ses}, d.tlsCfg)
 	tc.SetDeadline(time.Now().Add(time.Second * 10))
 	tc.SetDeadline(time.Now().Add(time.Second * 10))

+ 2 - 0
lib/connections/kcp_listen.go

@@ -123,12 +123,14 @@ func (t *kcpListener) Serve() {
 			continue
 			continue
 		}
 		}
 
 
+		ses.SetDeadline(time.Now().Add(10 * time.Second))
 		stream, err := ses.AcceptStream()
 		stream, err := ses.AcceptStream()
 		if err != nil {
 		if err != nil {
 			l.Debugln("smux accept:", err)
 			l.Debugln("smux accept:", err)
 			ses.Close()
 			ses.Close()
 			continue
 			continue
 		}
 		}
+		ses.SetDeadline(time.Time{})
 
 
 		tc := tls.Server(&sessionClosingStream{stream, ses}, t.tlsCfg)
 		tc := tls.Server(&sessionClosingStream{stream, ses}, t.tlsCfg)
 		tc.SetDeadline(time.Now().Add(time.Second * 10))
 		tc.SetDeadline(time.Now().Add(time.Second * 10))