• Brad Fitzpatrick's avatar
    [release-branch.go1.8] net, net/http: adjust time-in-past constant even earlier · e35c01b4
    Brad Fitzpatrick authored
    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: default avatarRuss Cox <rsc@golang.org>
    (cherry picked from commit e83fc2e44336423dab94bfe74fad4c4e6a4703b3)
    Reviewed-on: https://go-review.googlesource.com/38786Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
    e35c01b4
net.go 20.2 KB