From 04c0d59454d137b93d520e12dd3b862634fcde2f Mon Sep 17 00:00:00 2001 From: ffdfgdfg Date: Mon, 2 Dec 2019 21:14:14 +0800 Subject: [PATCH] remove the default mux connection timeout if options is not set --- lib/mux/conn.go | 12 ++++++++++-- lib/mux/queue.go | 12 +++++++++--- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/mux/conn.go b/lib/mux/conn.go index f665248..8f6e31f 100644 --- a/lib/mux/conn.go +++ b/lib/mux/conn.go @@ -499,8 +499,16 @@ start: func (Self *SendWindow) waitReceiveWindow() (err error) { t := Self.timeout.Sub(time.Now()) - if t < 0 { - t = time.Minute * 5 + if t < 0 { // not set the timeout, wait for it as long as connection close + select { + case _, ok := <-Self.setSizeCh: + if !ok { + return errors.New("conn.writeWindow: window closed") + } + return nil + case <-Self.closeOpCh: + return errors.New("conn.writeWindow: window closed") + } } timer := time.NewTimer(t) defer timer.Stop() diff --git a/lib/mux/queue.go b/lib/mux/queue.go index 6f14faa..9a62fa2 100644 --- a/lib/mux/queue.go +++ b/lib/mux/queue.go @@ -218,7 +218,7 @@ type ReceiveWindowQueue struct { // 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. // 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() { @@ -300,8 +300,14 @@ func (Self *ReceiveWindowQueue) waitPush() (err error) { //logs.Warn("wait push") //defer logs.Warn("wait push finish") 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) defer timer.Stop()