]> Cypherpunks.ru repositories - gostls13.git/commitdiff
context: make DeadlineExceeded have a Timeout method
authorBrad Fitzpatrick <bradfitz@golang.org>
Thu, 19 May 2016 18:08:43 +0000 (18:08 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 19 May 2016 23:09:16 +0000 (23:09 +0000)
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>

src/context/context.go
src/context/context_test.go

index 9ff19503b203adeb46786b1d5b561a00b6719bef..169db74f57ffe0fead6a154ac4b81c1abda92498 100644 (file)
@@ -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.
index 99456b188d2a6562ebc9b9ddf433995d97e29571..90e78e57ecc42e83623587c5c8dc9a2204ea3df0 100644 (file)
@@ -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")
+       }
+}