Commit 37b40dab authored by Julien Schmidt's avatar Julien Schmidt Committed by Brad Fitzpatrick

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
parent c39509a3
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment