From 747dda9767d3da479900ad180b11a73f78f0412e Mon Sep 17 00:00:00 2001 From: Alex Brainman Date: Sun, 25 Nov 2012 10:02:57 +1100 Subject: [PATCH] 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 --- src/pkg/net/fd_windows.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/pkg/net/fd_windows.go b/src/pkg/net/fd_windows.go index 5338def922..351f9271c7 100644 --- a/src/pkg/net/fd_windows.go +++ b/src/pkg/net/fd_windows.go @@ -169,6 +169,15 @@ func (s *ioSrv) ProcessRemoteIO() { func (s *ioSrv) ExecIO(oi anOpIface, deadline int64) (int, error) { var err error 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 { err = oi.Submit() } else { @@ -188,12 +197,8 @@ func (s *ioSrv) ExecIO(oi anOpIface, deadline int64) (int, error) { } // Setup timer, if deadline is given. var timer <-chan time.Time - if deadline != 0 { - dt := deadline - time.Now().UnixNano() - if dt < 1 { - dt = 1 - } - t := time.NewTimer(time.Duration(dt) * time.Nanosecond) + if delta > 0 { + t := time.NewTimer(time.Duration(delta) * time.Nanosecond) defer t.Stop() timer = t.C } -- 2.48.1