aboutsummaryrefslogtreecommitdiff
path: root/src/context
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2016-05-19 18:08:43 +0000
committerBrad Fitzpatrick <bradfitz@golang.org>2016-05-19 23:09:16 +0000
commitdc4427f3727804ded270bc6a7a8066ccb3c151d0 (patch)
treef202326e7dd34e6af398ed342e0bacbaeef0a3c6 /src/context
parent0b80659832ec72532ee1210cdb51422ee6012c66 (diff)
downloadgo-dc4427f3727804ded270bc6a7a8066ccb3c151d0.tar.gz
go-dc4427f3727804ded270bc6a7a8066ccb3c151d0.zip
context: make DeadlineExceeded have a Timeout method
Fixes #14238 Change-Id: I1538bfb5cfa63e36a89df1f6eb9f5a0dcafb6ce5 Reviewed-on: https://go-review.googlesource.com/23256 Reviewed-by: Dave Cheney <dave@cheney.net> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/context')
-rw-r--r--src/context/context.go8
-rw-r--r--src/context/context_test.go12
2 files changed, 19 insertions, 1 deletions
diff --git a/src/context/context.go b/src/context/context.go
index 9ff19503b2..169db74f57 100644
--- a/src/context/context.go
+++ b/src/context/context.go
@@ -144,7 +144,13 @@ var Canceled = errors.New("context canceled")
// DeadlineExceeded is the error returned by Context.Err when the context's
// deadline passes.
-var DeadlineExceeded = errors.New("context deadline exceeded")
+var DeadlineExceeded error = deadlineExceededError{}
+
+type deadlineExceededError struct{}
+
+func (deadlineExceededError) Error() string { return "context deadline exceeded" }
+
+func (deadlineExceededError) Timeout() bool { return true }
// 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.
diff --git a/src/context/context_test.go b/src/context/context_test.go
index 99456b188d..90e78e57ec 100644
--- a/src/context/context_test.go
+++ b/src/context/context_test.go
@@ -594,3 +594,15 @@ func recoveredValue(fn func()) (v interface{}) {
fn()
return
}
+
+func TestDeadlineExceededSupportsTimeout(t *testing.T) {
+ i, ok := DeadlineExceeded.(interface {
+ Timeout() bool
+ })
+ if !ok {
+ t.Fatal("DeadlineExceeded does not support Timeout interface")
+ }
+ if !i.Timeout() {
+ t.Fatal("wrong value for timeout")
+ }
+}