diff options
| author | Brad Fitzpatrick <bradfitz@golang.org> | 2017-03-29 16:55:58 +0000 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2017-03-29 17:18:13 +0000 |
| commit | 6983b9a57955fa12ecd81ab8394ee09e64ef21b9 (patch) | |
| tree | 9d2833d02f2f8bfd4462b081c4244853c1ab4669 /src/net/http/http.go | |
| parent | 041ecb697f0e867a2bb0bf219cc2fd5f77057c2e (diff) | |
| download | go-6983b9a57955fa12ecd81ab8394ee09e64ef21b9.tar.xz | |
net, net/http: adjust time-in-past constant even earlier
The aLongTimeAgo time value in net and net/http is used to cancel
in-flight read and writes. It was set to time.Unix(233431200, 0)
which seemed like far enough in the past.
But Raspberry Pis, lacking a real time clock, had to spoil the fun and
boot in 1970 at the Unix epoch time, breaking assumptions in net and
net/http.
So change aLongTimeAgo to time.Unix(1, 0), which seems like the
earliest safe value. I don't trust subsecond values on all operating
systems, and I don't trust the Unix zero time. The Raspberry Pis do
advance their clock at least. And the reported problem was that Hijack
on a ResponseWriter hung forever, waiting for the connection read
operation to finish. So now, even if kernel + userspace boots in under
a second (unlikely), the Hijack will just have to wait for up to a
second.
Fixes #19747
Change-Id: Id59430de2e7b5b5117d4903a788863e9d344e53a
Reviewed-on: https://go-review.googlesource.com/38785
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/net/http/http.go')
| -rw-r--r-- | src/net/http/http.go | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/net/http/http.go b/src/net/http/http.go index 826f7ff3da..b95ca89f40 100644 --- a/src/net/http/http.go +++ b/src/net/http/http.go @@ -20,7 +20,7 @@ const maxInt64 = 1<<63 - 1 // aLongTimeAgo is a non-zero time, far in the past, used for // immediate cancelation of network operations. -var aLongTimeAgo = time.Unix(233431200, 0) +var aLongTimeAgo = time.Unix(1, 0) // TODO(bradfitz): move common stuff here. The other files have accumulated // generic http stuff in random places. |
