Skip to content

Commit

Permalink
all: remove os.ErrTimeout
Browse files Browse the repository at this point in the history
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 <[email protected]>
Run-TryBot: Damien Neil <[email protected]>
TryBot-Result: Gobot Gobot <[email protected]>
  • Loading branch information
neild committed Aug 2, 2019
1 parent 2d1a1e0 commit 0e54d28
Show file tree
Hide file tree
Showing 19 changed files with 8 additions and 150 deletions.
3 changes: 0 additions & 3 deletions api/go1.13.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
4 changes: 0 additions & 4 deletions src/context/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ package context

import (
"errors"
"internal/oserror"
"internal/reflectlite"
"sync"
"time"
Expand Down Expand Up @@ -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.
Expand Down
5 changes: 0 additions & 5 deletions src/context/context_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,8 @@
package context

import (
"errors"
"fmt"
"math/rand"
"os"
"runtime"
"strings"
"sync"
Expand Down Expand Up @@ -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")
}
}
2 changes: 1 addition & 1 deletion src/go/build/deps_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"},
Expand Down
28 changes: 0 additions & 28 deletions src/internal/oserror/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
43 changes: 0 additions & 43 deletions src/internal/oserror/errors_test.go

This file was deleted.

5 changes: 0 additions & 5 deletions src/internal/poll/fd.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ package poll

import (
"errors"
"internal/oserror"
)

// ErrNetClosing is returned when a network descriptor is used after
Expand Down Expand Up @@ -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")
Expand Down
9 changes: 0 additions & 9 deletions src/net/cgo_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import "C"

import (
"context"
"os"
"syscall"
"unsafe"
)
Expand All @@ -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
Expand Down
12 changes: 0 additions & 12 deletions src/net/http/transport.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand Down
16 changes: 0 additions & 16 deletions src/net/net.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
}
Expand Down
5 changes: 0 additions & 5 deletions src/net/pipe.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ package net

import (
"io"
"os"
"sync"
"time"
)
Expand Down Expand Up @@ -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" }
Expand Down
5 changes: 0 additions & 5 deletions src/net/timeout_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@
package net

import (
"errors"
"fmt"
"internal/oserror"
"internal/poll"
"internal/testenv"
"io"
Expand Down Expand Up @@ -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)
}
}
}
}
Expand Down
9 changes: 7 additions & 2 deletions src/net/url/url.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ package url
import (
"errors"
"fmt"
"internal/oserror"
"sort"
"strconv"
"strings"
Expand All @@ -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 {
Expand Down
2 changes: 0 additions & 2 deletions src/os/error.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand All @@ -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 {
Expand Down
2 changes: 0 additions & 2 deletions src/syscall/syscall_js.go
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
2 changes: 0 additions & 2 deletions src/syscall/syscall_nacl.go
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
2 changes: 0 additions & 2 deletions src/syscall/syscall_plan9.go
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
2 changes: 0 additions & 2 deletions src/syscall/syscall_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
2 changes: 0 additions & 2 deletions src/syscall/syscall_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down

0 comments on commit 0e54d28

Please sign in to comment.