• Daniel Morsing's avatar
    net/http: handle close/response race more gracefully · 39377013
    Daniel Morsing authored
    There was a logical race in Transport.RoundTrip where a roundtrip with
    a pending response would race with the channel for the connection
    closing. This usually happened for responses with connection: close
    and no body.
    
    We handled this race by reading the close channel, setting a timer
    for 100ms and if no response was returned before then, we would then
    return an error.
    
    This put a lower bound on how fast a connection could fail. We couldn't
    fail a request faster than 100ms.
    
    Reordering the channel operations gets rid of the logical race. If
    the readLoop causes the connection to be closed, it would have put
    its response into the return channel already and we can fetch it with
    a non-blocking receive.
    
    Change-Id: Idf09e48d7a0453d7de0120d3055d0ce5893a5428
    Reviewed-on: https://go-review.googlesource.com/1787Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    39377013
Name
Last commit
Last update
..
archive Loading commit data...
bufio Loading commit data...
builtin Loading commit data...
bytes Loading commit data...
cmd Loading commit data...
compress Loading commit data...
container Loading commit data...
crypto Loading commit data...
database/sql Loading commit data...
debug Loading commit data...
encoding Loading commit data...
errors Loading commit data...
expvar Loading commit data...
flag Loading commit data...
fmt Loading commit data...
go Loading commit data...
hash Loading commit data...
html Loading commit data...
image Loading commit data...
index/suffixarray Loading commit data...
internal Loading commit data...
io Loading commit data...
log Loading commit data...
math Loading commit data...
mime Loading commit data...
net Loading commit data...
os Loading commit data...
path Loading commit data...
reflect Loading commit data...
regexp Loading commit data...
runtime Loading commit data...
sort Loading commit data...
strconv Loading commit data...
strings Loading commit data...
sync Loading commit data...
syscall Loading commit data...
testing Loading commit data...
text Loading commit data...
time Loading commit data...
unicode Loading commit data...
unsafe Loading commit data...
Make.dist Loading commit data...
all.bash Loading commit data...
all.bat Loading commit data...
all.rc Loading commit data...
androidtest.bash Loading commit data...
bootstrap.bash Loading commit data...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc Loading commit data...
iostest.bash Loading commit data...
make.bash Loading commit data...
make.bat Loading commit data...
make.rc Loading commit data...
nacltest.bash Loading commit data...
race.bash Loading commit data...
race.bat Loading commit data...
run.bash Loading commit data...
run.bat Loading commit data...
run.rc Loading commit data...