From: Paul Marks Date: Fri, 3 Apr 2015 02:13:17 +0000 (-0700) Subject: net: dialChannel should not treat an expired deadline as noDeadline. X-Git-Tag: go1.5beta1~1304 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=c50a8416c851ab6897f9efcd932ac26b5862dcad;p=gostls13.git net: dialChannel should not treat an expired deadline as noDeadline. Now, only a zero deadline is interpreted as noDeadline. Any other time in the past yields an immediate timeout. TestConnectDeadlineInThePast already covers this case. We just need to un-skip it for plan9, where dialChannel is used. Change-Id: I995fd1a632c31f8004dac772c3d7c43a2a5853b0 Reviewed-on: https://go-review.googlesource.com/8435 Reviewed-by: Mikio Hara --- diff --git a/src/net/dial_gen.go b/src/net/dial_gen.go index 654ef9383a..3816844b26 100644 --- a/src/net/dial_gen.go +++ b/src/net/dial_gen.go @@ -12,12 +12,12 @@ import "time" // used on operating systems where the deadline hasn't been pushed // down into the pollserver. (Plan 9 and some old versions of Windows) func dialChannel(net string, ra Addr, dialer func(time.Time) (Conn, error), deadline time.Time) (Conn, error) { - var timeout time.Duration - if !deadline.IsZero() { - timeout = deadline.Sub(time.Now()) + if deadline.IsZero() { + return dialer(noDeadline) } + timeout := deadline.Sub(time.Now()) if timeout <= 0 { - return dialer(noDeadline) + return nil, &OpError{Op: "dial", Net: net, Addr: ra, Err: errTimeout} } t := time.NewTimer(timeout) defer t.Stop() diff --git a/src/net/timeout_test.go b/src/net/timeout_test.go index b46321b13b..361f822d9e 100644 --- a/src/net/timeout_test.go +++ b/src/net/timeout_test.go @@ -682,11 +682,6 @@ func TestAcceptDeadlineConnectionAvailable(t *testing.T) { // TestConnectDeadlineInThePast tests that connect deadlines work, even // if the connection can be established w/o blocking. func TestConnectDeadlineInThePast(t *testing.T) { - switch runtime.GOOS { - case "plan9": - t.Skipf("skipping test on %q", runtime.GOOS) - } - ln := newLocalListener(t).(*TCPListener) defer ln.Close()