Преглед на файлове

Fix deadlock in kcp.read

v2ray преди 9 години
родител
ревизия
a88a120938
променени са 1 файла, в които са добавени 6 реда и са изтрити 2 реда
  1. 6 2
      transport/internet/kcp/connection.go

+ 6 - 2
transport/internet/kcp/connection.go

@@ -179,8 +179,12 @@ func (this *Connection) Read(b []byte) (int, error) {
 			return nBytes, nil
 		}
 		var timer *time.Timer
-		if !this.rd.IsZero() && this.rd.Before(time.Now()) {
-			timer = time.AfterFunc(this.rd.Sub(time.Now()), this.dataInputCond.Signal)
+		if !this.rd.IsZero() {
+			duration := this.rd.Sub(time.Now())
+			if duration <= 0 {
+				return 0, errTimeout
+			}
+			timer = time.AfterFunc(duration, this.dataInputCond.Signal)
 		}
 		this.dataInputCond.L.Lock()
 		this.dataInputCond.Wait()