]> Cypherpunks repositories - gostls13.git/commitdiff
all: remove os.ErrTimeout
authorDamien Neil <dneil@google.com>
Fri, 2 Aug 2019 16:09:27 +0000 (09:09 -0700)
committerDamien Neil <dneil@google.com>
Fri, 2 Aug 2019 17:57:18 +0000 (17:57 +0000)
It is unclear whether the current definition of os.IsTimeout is
desirable or not. Drop ErrTimeout for now so we can consider adding it
(or some other error) in a future release with a corrected definition.

Fixes #33411

Change-Id: I8b880da7d22afc343a08339eb5f0efd1075ecafe
Reviewed-on: https://go-review.googlesource.com/c/go/+/188758
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Damien Neil <dneil@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

19 files changed:
api/go1.13.txt
src/context/context.go
src/context/context_test.go
src/go/build/deps_test.go
src/internal/oserror/errors.go
src/internal/oserror/errors_test.go [deleted file]
src/internal/poll/fd.go
src/net/cgo_unix.go
src/net/http/transport.go
src/net/net.go
src/net/pipe.go
src/net/timeout_test.go
src/net/url/url.go
src/os/error.go
src/syscall/syscall_js.go
src/syscall/syscall_nacl.go
src/syscall/syscall_plan9.go
src/syscall/syscall_unix.go
src/syscall/syscall_windows.go

index a8e39ce8ea8a5e7a6bcd3eb0943bf61abd4e851e..d964d64019eab663a3010da503467427e1a86de6 100644 (file)
@@ -209,8 +209,6 @@ pkg net/http, type Transport struct, ForceAttemptHTTP2 bool
 pkg net/http, type Transport struct, ReadBufferSize int
 pkg net/http, type Transport struct, WriteBufferSize int
 pkg net, method (*DNSConfigError) Unwrap() error
-pkg net, method (*DNSError) Is(error) bool
-pkg net, method (*OpError) Is(error) bool
 pkg net, method (*OpError) Unwrap() error
 pkg net, type DNSError struct, IsNotFound bool
 pkg net, type ListenConfig struct, KeepAlive time.Duration
@@ -237,7 +235,6 @@ pkg os (netbsd-arm64), const O_SYNC = 128
 pkg os (netbsd-arm64), const O_TRUNC = 1024
 pkg os (netbsd-arm64), const PathListSeparator = 58
 pkg os (netbsd-arm64), const PathSeparator = 47
-pkg os, var ErrTimeout error
 pkg path/filepath (netbsd-arm64-cgo), const ListSeparator = 58
 pkg path/filepath (netbsd-arm64-cgo), const Separator = 47
 pkg path/filepath (netbsd-arm64), const ListSeparator = 58
index b400396513ef2d8cc6358dc9ef44fc00e703a8bf..62590850a66220027342acbfdcd64218aa11f6b8 100644 (file)
@@ -49,7 +49,6 @@ package context
 
 import (
        "errors"
-       "internal/oserror"
        "internal/reflectlite"
        "sync"
        "time"
@@ -163,9 +162,6 @@ type deadlineExceededError struct{}
 func (deadlineExceededError) Error() string   { return "context deadline exceeded" }
 func (deadlineExceededError) Timeout() bool   { return true }
 func (deadlineExceededError) Temporary() bool { return true }
-func (deadlineExceededError) Is(target error) bool {
-       return target == oserror.ErrTimeout
-}
 
 // An emptyCtx is never canceled, has no values, and has no deadline. It is not
 // struct{}, since vars of this type must have distinct addresses.
index 9991c5b09cc13913ed6358fa282460a546edf2d1..0e69e2f6fdefa85a0ea8bc24b78daf0845bb4b1b 100644 (file)
@@ -5,10 +5,8 @@
 package context
 
 import (
-       "errors"
        "fmt"
        "math/rand"
-       "os"
        "runtime"
        "strings"
        "sync"
@@ -649,7 +647,4 @@ func XTestDeadlineExceededSupportsTimeout(t testingT) {
        if !i.Timeout() {
                t.Fatal("wrong value for timeout")
        }
-       if !errors.Is(DeadlineExceeded, os.ErrTimeout) {
-               t.Fatal("errors.Is(DeadlineExceeded, os.ErrTimeout) = false, want true")
-       }
 }
index bd866ee7383c733e8858188316a5d5fc24129298..fb862459c8a3eab4c39a7d60e774dd7dc6885f7c 100644 (file)
@@ -250,7 +250,7 @@ var pkgDeps = map[string][]string{
        "compress/gzip":                  {"L4", "compress/flate"},
        "compress/lzw":                   {"L4"},
        "compress/zlib":                  {"L4", "compress/flate"},
-       "context":                        {"errors", "internal/oserror", "internal/reflectlite", "sync", "time"},
+       "context":                        {"errors", "internal/reflectlite", "sync", "time"},
        "database/sql":                   {"L4", "container/list", "context", "database/sql/driver", "database/sql/internal"},
        "database/sql/driver":            {"L4", "context", "time", "database/sql/internal"},
        "debug/dwarf":                    {"L4"},
index 8fccc9548208cc477d8a906038fe64580829ed8a..28a1ab32d32c5fc03b9dfaf8587f77e9090ab4a0 100644 (file)
@@ -15,32 +15,4 @@ var (
        ErrExist      = errors.New("file already exists")
        ErrNotExist   = errors.New("file does not exist")
        ErrClosed     = errors.New("file already closed")
-       ErrTimeout    = timeoutError{}
 )
-
-type timeoutError struct{}
-
-func (timeoutError) Error() string { return "deadline exceeded" }
-func (timeoutError) Timeout() bool { return true }
-
-type temporaryError struct{}
-
-func (temporaryError) Error() string   { return "temporary error" }
-func (temporaryError) Temporary() bool { return true }
-
-// IsTimeout reports whether err indicates a timeout.
-func IsTimeout(err error) bool {
-       for err != nil {
-               if err == ErrTimeout {
-                       return true
-               }
-               if x, ok := err.(interface{ Timeout() bool }); ok {
-                       return x.Timeout()
-               }
-               if x, ok := err.(interface{ Is(error) bool }); ok && x.Is(ErrTimeout) {
-                       return true
-               }
-               err = errors.Unwrap(err)
-       }
-       return false
-}
diff --git a/src/internal/oserror/errors_test.go b/src/internal/oserror/errors_test.go
deleted file mode 100644 (file)
index bf3e057..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-package oserror_test
-
-import (
-       "errors"
-       "fmt"
-       "internal/oserror"
-       "os"
-       "testing"
-)
-
-type ttError struct {
-       timeout bool
-}
-
-func (e ttError) Error() string {
-       return fmt.Sprintf("ttError{timeout:%v}", e.timeout)
-}
-func (e ttError) Timeout() bool { return e.timeout }
-
-type isError struct {
-       err error
-}
-
-func (e isError) Error() string        { return fmt.Sprintf("isError(%v)", e.err) }
-func (e isError) Is(target error) bool { return e.err == target }
-
-func TestIsTimeout(t *testing.T) {
-       for _, test := range []struct {
-               want bool
-               err  error
-       }{
-               {true, ttError{timeout: true}},
-               {true, isError{os.ErrTimeout}},
-               {true, os.ErrTimeout},
-               {true, fmt.Errorf("wrap: %w", os.ErrTimeout)},
-               {false, ttError{timeout: false}},
-               {false, errors.New("error")},
-       } {
-               if got, want := oserror.IsTimeout(test.err), test.want; got != want {
-                       t.Errorf("IsTimeout(err) = %v, want %v\n%+v", got, want, test.err)
-               }
-       }
-}
index 5009e2671b023ecf2e6fe2a8256723cb0d498111..c0de50c1b46e55ba6c658dfa352ac1a2b67d17fb 100644 (file)
@@ -11,7 +11,6 @@ package poll
 
 import (
        "errors"
-       "internal/oserror"
 )
 
 // ErrNetClosing is returned when a network descriptor is used after
@@ -47,10 +46,6 @@ func (e *TimeoutError) Error() string   { return "i/o timeout" }
 func (e *TimeoutError) Timeout() bool   { return true }
 func (e *TimeoutError) Temporary() bool { return true }
 
-func (e *TimeoutError) Is(target error) bool {
-       return target == oserror.ErrTimeout
-}
-
 // ErrNotPollable is returned when the file or socket is not suitable
 // for event notification.
 var ErrNotPollable = errors.New("not pollable")
index c31cbfd814a3eb177b9a1f06e33a45c5bf88f1ec..69c99fe7dbbc6f50435a19364016568f4e0b861d 100644 (file)
@@ -24,7 +24,6 @@ import "C"
 
 import (
        "context"
-       "os"
        "syscall"
        "unsafe"
 )
@@ -38,14 +37,6 @@ func (eai addrinfoErrno) Error() string   { return C.GoString(C.gai_strerror(C.i
 func (eai addrinfoErrno) Temporary() bool { return eai == C.EAI_AGAIN }
 func (eai addrinfoErrno) Timeout() bool   { return false }
 
-func (eai addrinfoErrno) Is(target error) bool {
-       switch target {
-       case os.ErrTimeout:
-               return eai.Timeout()
-       }
-       return false
-}
-
 type portLookupResult struct {
        port int
        err  error
index e3a1a10cc61f2aa05c4a09d62cc2544f353f88ee..5c1708c83270be538253fe0cd6c19c622398254c 100644 (file)
@@ -2284,14 +2284,6 @@ func (e *httpError) Error() string   { return e.err }
 func (e *httpError) Timeout() bool   { return e.timeout }
 func (e *httpError) Temporary() bool { return true }
 
-func (e *httpError) Is(target error) bool {
-       switch target {
-       case os.ErrTimeout:
-               return e.timeout
-       }
-       return false
-}
-
 var errTimeout error = &httpError{err: "net/http: timeout awaiting response headers", timeout: true}
 
 // errRequestCanceled is set to be identical to the one from h2 to facilitate
@@ -2626,10 +2618,6 @@ func (tlsHandshakeTimeoutError) Timeout() bool   { return true }
 func (tlsHandshakeTimeoutError) Temporary() bool { return true }
 func (tlsHandshakeTimeoutError) Error() string   { return "net/http: TLS handshake timeout" }
 
-func (tlsHandshakeTimeoutError) Is(target error) bool {
-       return target == os.ErrTimeout
-}
-
 // fakeLocker is a sync.Locker which does nothing. It's used to guard
 // test-only fields when not under test, to avoid runtime atomic
 // overhead.
index 54e1ac383ae3e666128dc080905012c39b728010..4ed40237a8a9e0749a57aa9c00cff7b126872d8a 100644 (file)
@@ -516,14 +516,6 @@ func (e *OpError) Temporary() bool {
        return ok && t.Temporary()
 }
 
-func (e *OpError) Is(target error) bool {
-       switch target {
-       case os.ErrTimeout:
-               return e.Timeout()
-       }
-       return false
-}
-
 // A ParseError is the error type of literal network address parsers.
 type ParseError struct {
        // Type is the type of string that was expected, such as
@@ -615,14 +607,6 @@ func (e *DNSError) Timeout() bool { return e.IsTimeout }
 // error and return a DNSError for which Temporary returns false.
 func (e *DNSError) Temporary() bool { return e.IsTimeout || e.IsTemporary }
 
-func (e *DNSError) Is(target error) bool {
-       switch target {
-       case os.ErrTimeout:
-               return e.Timeout()
-       }
-       return false
-}
-
 type writerOnly struct {
        io.Writer
 }
index 5abc4aabe6d4a8de852676434484bb6448498936..9177fc403643e3b9de936811a9c1873efa5a34cf 100644 (file)
@@ -6,7 +6,6 @@ package net
 
 import (
        "io"
-       "os"
        "sync"
        "time"
 )
@@ -85,10 +84,6 @@ func (timeoutError) Error() string   { return "deadline exceeded" }
 func (timeoutError) Timeout() bool   { return true }
 func (timeoutError) Temporary() bool { return true }
 
-func (timeoutError) Is(target error) bool {
-       return target == os.ErrTimeout
-}
-
 type pipeAddr struct{}
 
 func (pipeAddr) Network() string { return "pipe" }
index 93e46025a2edce626921ca159d3a66d73740e961..b4fc2c0198169e58bf0d55ff5a387416f804fe44 100644 (file)
@@ -7,9 +7,7 @@
 package net
 
 import (
-       "errors"
        "fmt"
-       "internal/oserror"
        "internal/poll"
        "internal/testenv"
        "io"
@@ -90,9 +88,6 @@ func TestDialTimeout(t *testing.T) {
                        if nerr, ok := err.(Error); !ok || !nerr.Timeout() {
                                t.Fatalf("#%d: %v", i, err)
                        }
-                       if !errors.Is(err, oserror.ErrTimeout) {
-                               t.Fatalf("#%d: Dial error is not os.ErrTimeout: %v", i, err)
-                       }
                }
        }
 }
index 3212b9e998d8040187b0c8276d8fa08b942da08c..982cfe6c0c45333f4485a0feff087c72be4db677 100644 (file)
@@ -13,7 +13,6 @@ package url
 import (
        "errors"
        "fmt"
-       "internal/oserror"
        "sort"
        "strconv"
        "strings"
@@ -28,7 +27,13 @@ type Error struct {
 
 func (e *Error) Unwrap() error { return e.Err }
 func (e *Error) Error() string { return e.Op + " " + e.URL + ": " + e.Err.Error() }
-func (e *Error) Timeout() bool { return oserror.IsTimeout(e.Err) }
+
+func (e *Error) Timeout() bool {
+       t, ok := e.Err.(interface {
+               Timeout() bool
+       })
+       return ok && t.Timeout()
+}
 
 func (e *Error) Temporary() bool {
        t, ok := e.Err.(interface {
index 4cf35f2b773f237daa4b4e64564f0b41ef9c7ebc..09ba158677158afe0b6f37f67e87bc799fdd8233 100644 (file)
@@ -22,7 +22,6 @@ var (
        ErrExist      = errExist()      // "file already exists"
        ErrNotExist   = errNotExist()   // "file does not exist"
        ErrClosed     = errClosed()     // "file already closed"
-       ErrTimeout    = errTimeout()    // "deadline exceeded"
        ErrNoDeadline = errNoDeadline() // "file type does not support deadline"
 )
 
@@ -31,7 +30,6 @@ func errPermission() error { return oserror.ErrPermission }
 func errExist() error      { return oserror.ErrExist }
 func errNotExist() error   { return oserror.ErrNotExist }
 func errClosed() error     { return oserror.ErrClosed }
-func errTimeout() error    { return oserror.ErrTimeout }
 func errNoDeadline() error { return poll.ErrNoDeadline }
 
 type timeout interface {
index 6db01c32f1108a97ea69adde7cabfe25079c03b0..175fe47fcaa0d3c76a545d4cfe61dda68d0bf865 100644 (file)
@@ -58,8 +58,6 @@ func (e Errno) Error() string {
 
 func (e Errno) Is(target error) bool {
        switch target {
-       case oserror.ErrTimeout:
-               return e.Timeout()
        case oserror.ErrPermission:
                return e == EACCES || e == EPERM
        case oserror.ErrExist:
index 33ad8bfab040a0c07da5f92d15abb4b806d2fdce..e887b1e04ebc1833acbd9080d1f05875d419f6aa 100644 (file)
@@ -65,8 +65,6 @@ func (e Errno) Error() string {
 
 func (e Errno) Is(target error) bool {
        switch target {
-       case oserror.ErrTimeout:
-               return e.Timeout()
        case oserror.ErrPermission:
                return e == EACCES || e == EPERM
        case oserror.ErrExist:
index d1b4bd9bd51a97566e7192a58f5af35fef58ec29..c11f03053142f9ae10c8f19994b985bba2857e04 100644 (file)
@@ -29,8 +29,6 @@ func NewError(s string) error { return ErrorString(s) }
 
 func (e ErrorString) Is(target error) bool {
        switch target {
-       case oserror.ErrTimeout:
-               return e.Timeout()
        case oserror.ErrPermission:
                return checkErrMessageContent(e, "permission denied")
        case oserror.ErrExist:
index 4bb7799d53d4bad18ef071d093f928b57c2a613c..59c8c34933d7dc7383deac26d1d0149ad9565f93 100644 (file)
@@ -121,8 +121,6 @@ func (e Errno) Error() string {
 
 func (e Errno) Is(target error) bool {
        switch target {
-       case oserror.ErrTimeout:
-               return e.Timeout()
        case oserror.ErrPermission:
                return e == EACCES || e == EPERM
        case oserror.ErrExist:
index aa4cfa724336d8065f57b1baf1f4d02e35dcb2c1..2e8edc7accdfd042a2ccf2c3111d202658c0998a 100644 (file)
@@ -115,8 +115,6 @@ const _ERROR_BAD_NETPATH = Errno(53)
 
 func (e Errno) Is(target error) bool {
        switch target {
-       case oserror.ErrTimeout:
-               return e.Timeout()
        case oserror.ErrPermission:
                return e == ERROR_ACCESS_DENIED
        case oserror.ErrExist: