|
@@ -118,12 +118,17 @@ START:
|
|
|
|
|
|
WAIT:
|
|
WAIT:
|
|
var timeout <-chan time.Time
|
|
var timeout <-chan time.Time
|
|
|
|
+ var timer *time.Timer
|
|
if !s.readDeadline.IsZero() {
|
|
if !s.readDeadline.IsZero() {
|
|
delay := s.readDeadline.Sub(time.Now())
|
|
delay := s.readDeadline.Sub(time.Now())
|
|
- timeout = time.After(delay)
|
|
|
|
|
|
+ timer = time.NewTimer(delay)
|
|
|
|
+ timeout = timer.C
|
|
}
|
|
}
|
|
select {
|
|
select {
|
|
case <-s.recvNotifyCh:
|
|
case <-s.recvNotifyCh:
|
|
|
|
+ if timer != nil {
|
|
|
|
+ timer.Stop()
|
|
|
|
+ }
|
|
goto START
|
|
goto START
|
|
case <-timeout:
|
|
case <-timeout:
|
|
return 0, ErrTimeout
|
|
return 0, ErrTimeout
|