1. 10 Apr, 2014 9 commits
    • Brad Fitzpatrick's avatar
      net/http: don't reuse Transport connection unless Request.Write finished · 6278a954
      Brad Fitzpatrick authored
      In a typical HTTP request, the client writes the request, and
      then the server replies. Go's HTTP client code (Transport) has
      two goroutines per connection: one writing, and one reading. A
      third goroutine (the one initiating the HTTP request)
      coordinates with those two.
      
      Because most HTTP requests are done when the server replies,
      the Go code has always handled connection reuse purely in the
      readLoop goroutine.
      
      But if a client is writing a large request and the server
      replies before it's consumed the entire request (e.g. it
      replied with a 403 Forbidden and had no use for the body), it
      was possible for Go to re-select that connection for a
      subsequent request before we were done writing the first. That
      wasn't actually a data race; the second HTTP request would
      just get enqueued to write its request on the writeLoop. But
      because the previous writeLoop didn't finish writing (and
      might not ever), that connection is in a weird state. We
      really just don't want to get into a state where we're
      re-using a connection when the server spoke out of turn.
      
      This CL changes the readLoop goroutine to verify that the
      writeLoop finished before returning the connection.
      
      In the process, it also fixes a potential goroutine leak where
      a connection could close but the recycling logic could be
      blocked forever waiting for the client to read to EOF or
      error. Now it also selects on the persistConn's close channel,
      and the closer of that is no longer the readLoop (which was
      dead locking in some cases before). It's now closed at the
      same place the underlying net.Conn is closed. This likely fixes
      or helps Issue 7620.
      
      Also addressed some small cosmetic things in the process.
      
      Update #7620
      Fixes #7569
      
      LGTM=adg
      R=golang-codereviews, adg
      CC=dsymonds, golang-codereviews, rsc
      https://golang.org/cl/86290043
      6278a954
    • David du Colombier's avatar
      runtime: no longer skip stack growth test in short mode · d7ac73c8
      David du Colombier authored
      We originally decided to skip this test in short mode
      to prevent the parallel runtime test to timeout on the
      Plan 9 builder. This should no longer be required since
      the issue was fixed in CL 86210043.
      
      LGTM=dave, bradfitz
      R=dvyukov, dave, bradfitz
      CC=golang-codereviews, rsc
      https://golang.org/cl/84790044
      d7ac73c8
    • David du Colombier's avatar
      runtime: fix semasleep on Plan 9 · 5a513061
      David du Colombier authored
      If you pass ns = 100,000 to this function, timediv will
      return ms = 0. tsemacquire in /sys/src/9/port/sysproc.c
      will return immediately when ms == 0 and the semaphore
      cannot be acquired immediately - it doesn't sleep - so
      notetsleep will spin, chewing cpu and repeatedly reading
      the time, until the 100us have passed.
      
      Thanks to the time reads it won't take too many iterations,
      but whatever we are waiting for does not get a chance to
      run. Eventually the notetsleep spin loop returns and we
      end up in the stoptheworld spin loop - actually a sleep
      loop but we're not doing a good job of sleeping.
      
      After 100ms or so of this, the kernel says enough and
      schedules a different thread. That thread manages to do
      whatever we're waiting for, and the spinning in the other
      thread stops. If tsemacquire had actually slept, this
      would have happened much quicker.
      
      Many thanks to Russ Cox for help debugging.
      
      LGTM=rsc
      R=rsc
      CC=golang-codereviews
      https://golang.org/cl/86210043
      5a513061
    • Rob Pike's avatar
      doc/go1.3.html: minor changes: crypto, net · b6684b31
      Rob Pike authored
      All that's left is net/http and the stuff I need help describing: FreeBSD and Windows.
      
      LGTM=adg
      R=golang-codereviews, adg
      CC=golang-codereviews
      https://golang.org/cl/86320043
      b6684b31
    • Alex Brainman's avatar
      cmd/go: always build package during "go test" command · c8f90979
      Alex Brainman authored
      even when there are no *_test.go files present.
      rsc suggested this change
      
      Fixes #7108
      
      LGTM=r, adg
      R=golang-codereviews, r, adg
      CC=golang-codereviews
      https://golang.org/cl/84300043
      c8f90979
    • Preetam Jinka's avatar
      syscall: fix Getfsstat() for BSD · 4abbd4a4
      Preetam Jinka authored
      The buffer length should be the size in bytes
      instead of the number of structs.
      
      Fixes #6588.
      
      LGTM=mikioh.mikioh
      R=golang-codereviews, mikioh.mikioh, adg
      CC=golang-codereviews
      https://golang.org/cl/84830043
      4abbd4a4
    • Andrew Gerrand's avatar
      A+C: Preetam Jinka (individual CLA) · 0b0e8070
      Andrew Gerrand authored
      Generated by addca.
      
      R=gobot
      CC=golang-codereviews
      https://golang.org/cl/85550044
      0b0e8070
    • Robert Griesemer's avatar
      undo CL 86220044 / 41388e58be65 · 34a21dca
      Robert Griesemer authored
      bufio: undo incorrect bug fix
      
      ««« original CL description
      bufio: fix potential endless loop in ReadByte
      
      Fixes #7745.
      
      LGTM=bradfitz, r
      R=r, bradfitz
      CC=golang-codereviews
      https://golang.org/cl/86220044
      »»»
      
      LGTM=adg
      R=r, adg
      CC=golang-codereviews
      https://golang.org/cl/85550045
      34a21dca
    • Robert Griesemer's avatar
      bufio: fix potential endless loop in ReadByte · b38fba21
      Robert Griesemer authored
      Fixes #7745.
      
      LGTM=bradfitz, r
      R=r, bradfitz
      CC=golang-codereviews
      https://golang.org/cl/86220044
      b38fba21
  2. 09 Apr, 2014 19 commits
  3. 08 Apr, 2014 12 commits