1
0
mirror of https://github.com/golang/go synced 2024-10-02 20:31:21 -06:00

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 <mikioh.mikioh@gmail.com>
This commit is contained in:
Paul Marks 2015-04-02 19:13:17 -07:00 committed by Mikio Hara
parent 5242d2cef4
commit c50a8416c8
2 changed files with 5 additions and 10 deletions

View File

@ -12,13 +12,13 @@ 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 timeout <= 0 {
if deadline.IsZero() {
return dialer(noDeadline)
}
timeout := deadline.Sub(time.Now())
if timeout <= 0 {
return nil, &OpError{Op: "dial", Net: net, Addr: ra, Err: errTimeout}
}
t := time.NewTimer(timeout)
defer t.Stop()
type racer struct {

View File

@ -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()