aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/database/sql/sql.go
diff options
context:
space:
mode:
authorJulien Schmidt <google@julienschmidt.com>2012-08-23 19:29:47 -0700
committerBrad Fitzpatrick <bradfitz@golang.org>2012-08-23 19:29:47 -0700
commit37b40dab51e31ed246e2cd40b827d26b93cf9003 (patch)
tree13a515ac452a9cca86fd117732177bfaad0549f4 /src/pkg/database/sql/sql.go
parentc39509a3b3bdf645bbf4aef8186fddee67e61eae (diff)
downloadgo-37b40dab51e31ed246e2cd40b827d26b93cf9003.tar.xz
database/sql: stop reuse of bad connections
The second parameter for sql.putConn() (err) is always nil. As a result bad connections are reused, even if the driver returns an driver.ErrBadConn. Unsing a pointer to err instead achievs the desired behavior. See http://code.google.com/p/go/issues/detail?id=3777 for more details. Fixes #3777. R=golang-dev, dave, bradfitz, jameshuachow, BlakeSGentry CC=golang-dev https://golang.org/cl/6348069
Diffstat (limited to 'src/pkg/database/sql/sql.go')
-rwxr-xr-x[-rw-r--r--]src/pkg/database/sql/sql.go9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/pkg/database/sql/sql.go b/src/pkg/database/sql/sql.go
index b87f57f92f..b0cba949c6 100644..100755
--- a/src/pkg/database/sql/sql.go
+++ b/src/pkg/database/sql/sql.go
@@ -311,7 +311,10 @@ func (db *DB) prepare(query string) (stmt *Stmt, err error) {
if err != nil {
return nil, err
}
- defer db.putConn(ci, err)
+ defer func() {
+ db.putConn(ci, err)
+ }()
+
si, err := ci.Prepare(query)
if err != nil {
return nil, err
@@ -342,7 +345,9 @@ func (db *DB) exec(query string, args []interface{}) (res Result, err error) {
if err != nil {
return nil, err
}
- defer db.putConn(ci, err)
+ defer func() {
+ db.putConn(ci, err)
+ }()
if execer, ok := ci.(driver.Execer); ok {
dargs, err := driverArgs(nil, args)