Fixes an issue where prepared statements that outlive many
connections become expensive to invoke.
Fixes #6081
R=golang-dev
CC=bradfitz, golang-dev
https://golang.org/cl/
12646044
func (db *DB) connIfFree(wanted *driverConn) (*driverConn, error) {
db.mu.Lock()
defer db.mu.Unlock()
- if wanted.inUse {
- return nil, errConnBusy
- }
if wanted.dbmuClosed {
return nil, errConnClosed
}
+ if wanted.inUse {
+ return nil, errConnBusy
+ }
for i, conn := range db.freeConn {
if conn != wanted {
continue
if err == driver.ErrBadConn {
// Don't reuse bad connections.
db.mu.Unlock()
+ dc.Close()
return
}
if putConnHook != nil {
}
func TestIssue6081(t *testing.T) {
- t.Skip("known broken test")
db := newTestDB(t, "people")
defer closeDB(t, db)