1. 24 May, 2017 1 commit
    • Keith Randall's avatar
      [release-branch.go1.8] cmd/compile: zero ambiguously live variables at VARKILLs · e396667b
      Keith Randall authored
      This is a redo of CL 41076 backported to the 1.8 release branch.
      There were major conflicts, so I had to basically rewrite it again
      from scratch.  The way Progs are allocated changed.  Liveness analysis
      and Prog generation got reordered.  Liveness analysis changed from
      running on gc.BasicBlock to ssa.Block.  All that makes the logic quite
      a bit different.
      
      Please review carefully.
      
      From CL 41076:
      
      At VARKILLs, zero a variable if it is ambiguously live.
      After the VARKILL anything this variable references
      might be collected. If it were to become live again later,
      the GC will see references to already-collected objects.
      
      We don't know a variable is ambiguously live until very
      late in compilation (after lowering, register allocation, ...),
      so it is hard to generate the code in an arch-independent way.
      We also have to be careful not to clobber any registers.
      Fortunately, this almost never happens so performance is ~irrelevant.
      
      There are only 2 instances where this triggers in the stdlib.
      
      Fixes #20029
      
      Change-Id: Ibb757eec58ee07f40df5e561b19d315684dc4bda
      Reviewed-on: https://go-review.googlesource.com/43998
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      e396667b
  2. 23 May, 2017 15 commits
  3. 07 Apr, 2017 1 commit
  4. 05 Apr, 2017 21 commits
  5. 29 Mar, 2017 1 commit
    • 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
  6. 27 Mar, 2017 1 commit