aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/database/sql/sql.go
diff options
context:
space:
mode:
authorMatt Joiner <anacrolix@gmail.com>2013-08-14 09:27:30 -0700
committerBrad Fitzpatrick <bradfitz@golang.org>2013-08-14 09:27:30 -0700
commit13c7896fb69cb42da34c31480207aa4e8de19aa5 (patch)
treebd8757b21a0a1d052d62b4a594743f3aedf16577 /src/pkg/database/sql/sql.go
parente0ca536f369201623467d4d28d3f96d1a67619d6 (diff)
downloadgo-13c7896fb69cb42da34c31480207aa4e8de19aa5.tar.xz
database/sql: fix accumulation of bad conns on prepared statements
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
Diffstat (limited to 'src/pkg/database/sql/sql.go')
-rw-r--r--src/pkg/database/sql/sql.go7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/pkg/database/sql/sql.go b/src/pkg/database/sql/sql.go
index 352a7e82d9..f0c86a8aeb 100644
--- a/src/pkg/database/sql/sql.go
+++ b/src/pkg/database/sql/sql.go
@@ -518,12 +518,12 @@ var (
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
@@ -590,6 +590,7 @@ func (db *DB) putConn(dc *driverConn, err error) {
if err == driver.ErrBadConn {
// Don't reuse bad connections.
db.mu.Unlock()
+ dc.Close()
return
}
if putConnHook != nil {