diff options
| author | Matt Joiner <anacrolix@gmail.com> | 2013-08-14 09:27:30 -0700 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2013-08-14 09:27:30 -0700 |
| commit | 13c7896fb69cb42da34c31480207aa4e8de19aa5 (patch) | |
| tree | bd8757b21a0a1d052d62b4a594743f3aedf16577 /src/pkg/database/sql/sql.go | |
| parent | e0ca536f369201623467d4d28d3f96d1a67619d6 (diff) | |
| download | go-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.go | 7 |
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 { |
