|
@@ -218,7 +218,7 @@ type ReceiveWindowQueue struct {
|
|
// On ARM, x86-32, and 32-bit MIPS, it is the caller's responsibility
|
|
// On ARM, x86-32, and 32-bit MIPS, it is the caller's responsibility
|
|
// to arrange for 64-bit alignment of 64-bit words accessed atomically.
|
|
// to arrange for 64-bit alignment of 64-bit words accessed atomically.
|
|
// The first word in a variable or in an allocated struct, array, or slice can be relied upon to be 64-bit aligned.
|
|
// The first word in a variable or in an allocated struct, array, or slice can be relied upon to be 64-bit aligned.
|
|
- timeout time.Time
|
|
|
|
|
|
+ timeout time.Time
|
|
}
|
|
}
|
|
|
|
|
|
func (Self *ReceiveWindowQueue) New() {
|
|
func (Self *ReceiveWindowQueue) New() {
|
|
@@ -300,8 +300,14 @@ func (Self *ReceiveWindowQueue) waitPush() (err error) {
|
|
//logs.Warn("wait push")
|
|
//logs.Warn("wait push")
|
|
//defer logs.Warn("wait push finish")
|
|
//defer logs.Warn("wait push finish")
|
|
t := Self.timeout.Sub(time.Now())
|
|
t := Self.timeout.Sub(time.Now())
|
|
- if t <= 0 {
|
|
|
|
- t = time.Minute * 5
|
|
|
|
|
|
+ if t <= 0 { // not set the timeout, so wait for it without timeout, just like a tcp connection
|
|
|
|
+ select {
|
|
|
|
+ case <-Self.readOp:
|
|
|
|
+ return nil
|
|
|
|
+ case <-Self.stopOp:
|
|
|
|
+ err = io.EOF
|
|
|
|
+ return
|
|
|
|
+ }
|
|
}
|
|
}
|
|
timer := time.NewTimer(t)
|
|
timer := time.NewTimer(t)
|
|
defer timer.Stop()
|
|
defer timer.Stop()
|