Skip to content

Commit

Permalink
Revert "revert waitread"
Browse files Browse the repository at this point in the history
This reverts commit 8b51ae9.
  • Loading branch information
joway committed Nov 28, 2023
1 parent 8b51ae9 commit 0a1eaea
Showing 1 changed file with 31 additions and 15 deletions.
46 changes: 31 additions & 15 deletions connection_impl.go
Original file line number Diff line number Diff line change
Expand Up @@ -404,10 +404,17 @@ func (c *connection) waitRead(n int) (err error) {
}
// wait full n
for c.inputBuffer.Len() < n {
if !c.IsActive() {
switch c.status(closing) {
case poller:
return Exception(ErrEOF, "wait read")
case user:
return Exception(ErrConnClosed, "wait read")
default:
err = <-c.readTrigger
if err != nil {
return err
}
}
<-c.readTrigger
}
return nil
}
Expand All @@ -422,23 +429,32 @@ func (c *connection) waitReadWithTimeout(n int) (err error) {
}

for c.inputBuffer.Len() < n {
if !c.IsActive() {
// cannot return directly, stop timer before !
switch c.status(closing) {
case poller:
// cannot return directly, stop timer first!
err = Exception(ErrEOF, "wait read")
goto RET
case user:
// cannot return directly, stop timer first!
err = Exception(ErrConnClosed, "wait read")
break
}
select {
case <-c.readTimer.C:
// double check if there is enough data to be read
if c.inputBuffer.Len() >= n {
return nil
goto RET
default:
select {
case <-c.readTimer.C:
// double check if there is enough data to be read
if c.inputBuffer.Len() >= n {
return nil
}
return Exception(ErrReadTimeout, c.remoteAddr.String())
case err = <-c.readTrigger:
if err != nil {
return err
}
continue
}
return Exception(ErrReadTimeout, c.remoteAddr.String())
case <-c.readTrigger:
continue
}
}

RET:
// clean timer.C
if !c.readTimer.Stop() {
<-c.readTimer.C
Expand Down

0 comments on commit 0a1eaea

Please sign in to comment.