aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2017-03-29 16:55:58 +0000
committerBrad Fitzpatrick <bradfitz@golang.org>2017-03-29 18:29:32 +0000
commite35c01b4044130223eb7620589f8bc2b734d2045 (patch)
tree40ee15c5727e900741e4311fca75732c0036703c
parentc955eb19354a45250d0a3b545a551848a4d48729 (diff)
downloadgo-e35c01b4044130223eb7620589f8bc2b734d2045.tar.gz
go-e35c01b4044130223eb7620589f8bc2b734d2045.zip
[release-branch.go1.8] 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. Updates #19747 Fixes #19771 (backport to Go 1.8.x) 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> (cherry picked from commit e83fc2e44336423dab94bfe74fad4c4e6a4703b3) Reviewed-on: https://go-review.googlesource.com/38786 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-rw-r--r--src/net/http/http.go2
-rw-r--r--src/net/net.go2
2 files changed, 2 insertions, 2 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.
diff --git a/src/net/net.go b/src/net/net.go
index 81206ea1cb..a8b57361e6 100644
--- a/src/net/net.go
+++ b/src/net/net.go
@@ -468,7 +468,7 @@ func (e *OpError) Error() string {
var (
// aLongTimeAgo is a non-zero time, far in the past, used for
// immediate cancelation of dials.
- aLongTimeAgo = time.Unix(233431200, 0)
+ aLongTimeAgo = time.Unix(1, 0)
// nonDeadline and noCancel are just zero values for
// readability with functions taking too many parameters.