1
0
mirror of https://github.com/golang/go synced 2024-11-24 05:50:13 -07:00

net/http: keep idle conns sorted by usage

Addressing feedback from Alan Su in https://golang.org/cl/22655

Change-Id: Ie0724efea2b4da67503c074e265ec7f8d7de7791
Reviewed-on: https://go-review.googlesource.com/22709
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Brad Fitzpatrick 2016-05-02 22:22:25 +00:00
parent 6b019e216b
commit f459660cb8

View File

@ -69,7 +69,7 @@ const DefaultMaxIdleConnsPerHost = 2
type Transport struct {
idleMu sync.Mutex
wantIdle bool // user has requested to close all idle conns
idleConn map[connectMethodKey][]*persistConn
idleConn map[connectMethodKey][]*persistConn // most recently used at end
idleConnCh map[connectMethodKey]chan *persistConn
idleLRU connLRU
@ -690,7 +690,7 @@ func (t *Transport) getIdleConn(cm connectMethod) (pconn *persistConn, idleSince
delete(t.idleConn, key)
} else {
// 2 or more cached connections; use the most
// recently used one.
// recently used one at the end.
pconn = pconns[len(pconns)-1]
t.idleConn[key] = pconns[:len(pconns)-1]
}
@ -740,7 +740,9 @@ func (t *Transport) removeIdleConnLocked(pconn *persistConn) {
if v != pconn {
continue
}
pconns[i] = pconns[len(pconns)-1]
// Slide down, keeping most recently-used
// conns at the end.
copy(pconns[i:], pconns[i+1:])
t.idleConn[key] = pconns[:len(pconns)-1]
break
}