]> Cypherpunks repositories - gostls13.git/commitdiff
net: actually reset deadline when time is zero
authorBrad Fitzpatrick <bradfitz@golang.org>
Tue, 24 Jan 2012 22:06:12 +0000 (14:06 -0800)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 24 Jan 2012 22:06:12 +0000 (14:06 -0800)
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5570056

src/pkg/net/sockopt.go
src/pkg/net/timeout_test.go

index 59f9af5f30adb334cec6a304476b4f22cf437fa2..3d0f8dd7a89622ecd6a72ca040b181b1c96b6d94 100644 (file)
@@ -117,12 +117,20 @@ func setWriteBuffer(fd *netFD, bytes int) error {
 }
 
 func setReadDeadline(fd *netFD, t time.Time) error {
-       fd.rdeadline = t.UnixNano()
+       if t.IsZero() {
+               fd.rdeadline = 0
+       } else {
+               fd.rdeadline = t.UnixNano()
+       }
        return nil
 }
 
 func setWriteDeadline(fd *netFD, t time.Time) error {
-       fd.wdeadline = t.UnixNano()
+       if t.IsZero() {
+               fd.wdeadline = 0
+       } else {
+               fd.wdeadline = t.UnixNano()
+       }
        return nil
 }
 
index 11db012ff576393fbfeb8c27d2e4ffd7e15e2026..bae37c86b2ed3b32fa511b387b5fca94b8f5c2d7 100644 (file)
@@ -77,3 +77,30 @@ func TestTimeoutTCP(t *testing.T) {
        testTimeout(t, "tcp", addr, false)
        <-done
 }
+
+func TestDeadlineReset(t *testing.T) {
+       if runtime.GOOS == "plan9" {
+               return
+       }
+       ln, err := Listen("tcp", "127.0.0.1:0")
+       if err != nil {
+               t.Fatal(err)
+       }
+       defer ln.Close()
+       tl := ln.(*TCPListener)
+       tl.SetDeadline(time.Now().Add(1 * time.Minute))
+       tl.SetDeadline(time.Time{}) // reset it
+       errc := make(chan error, 1)
+       go func() {
+               _, err := ln.Accept()
+               errc <- err
+       }()
+       select {
+       case <-time.After(50 * time.Millisecond):
+               // Pass.
+       case err := <-errc:
+               // Accept should never return; we never
+               // connected to it.
+               t.Errorf("unexpected return from Accept; err=%v", err)
+       }
+}