diff options
| author | Julien Schmidt <google@julienschmidt.com> | 2012-08-23 19:29:47 -0700 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2012-08-23 19:29:47 -0700 |
| commit | 37b40dab51e31ed246e2cd40b827d26b93cf9003 (patch) | |
| tree | 13a515ac452a9cca86fd117732177bfaad0549f4 /src/pkg/database/sql/sql.go | |
| parent | c39509a3b3bdf645bbf4aef8186fddee67e61eae (diff) | |
| download | go-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.go | 9 |
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) |
