mirror of
https://github.com/golang/go
synced 2024-09-25 03:00:12 -06:00
net: do not start io if deadline has passed
R=golang-dev, mikioh.mikioh, minux.ma, bradfitz CC=golang-dev https://golang.org/cl/6851098
This commit is contained in:
parent
7afcae6bab
commit
747dda9767
@ -169,6 +169,15 @@ func (s *ioSrv) ProcessRemoteIO() {
|
|||||||
func (s *ioSrv) ExecIO(oi anOpIface, deadline int64) (int, error) {
|
func (s *ioSrv) ExecIO(oi anOpIface, deadline int64) (int, error) {
|
||||||
var err error
|
var err error
|
||||||
o := oi.Op()
|
o := oi.Op()
|
||||||
|
// Calculate timeout delta.
|
||||||
|
var delta int64
|
||||||
|
if deadline != 0 {
|
||||||
|
delta = deadline - time.Now().UnixNano()
|
||||||
|
if delta <= 0 {
|
||||||
|
return 0, &OpError{oi.Name(), o.fd.net, o.fd.laddr, errTimeout}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Start IO.
|
||||||
if canCancelIO {
|
if canCancelIO {
|
||||||
err = oi.Submit()
|
err = oi.Submit()
|
||||||
} else {
|
} else {
|
||||||
@ -188,12 +197,8 @@ func (s *ioSrv) ExecIO(oi anOpIface, deadline int64) (int, error) {
|
|||||||
}
|
}
|
||||||
// Setup timer, if deadline is given.
|
// Setup timer, if deadline is given.
|
||||||
var timer <-chan time.Time
|
var timer <-chan time.Time
|
||||||
if deadline != 0 {
|
if delta > 0 {
|
||||||
dt := deadline - time.Now().UnixNano()
|
t := time.NewTimer(time.Duration(delta) * time.Nanosecond)
|
||||||
if dt < 1 {
|
|
||||||
dt = 1
|
|
||||||
}
|
|
||||||
t := time.NewTimer(time.Duration(dt) * time.Nanosecond)
|
|
||||||
defer t.Stop()
|
defer t.Stop()
|
||||||
timer = t.C
|
timer = t.C
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user