]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1] database/sql: stop reuse of bad connections
authorJulien Schmidt <google@julienschmidt.com>
Fri, 21 Sep 2012 19:54:47 +0000 (05:54 +1000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 21 Sep 2012 19:54:47 +0000 (05:54 +1000)
««« backport b397807815a6
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

»»»

src/pkg/database/sql/sql.go [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 89136ef..d557fc8
@@ -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
@@ -345,7 +348,9 @@ func (db *DB) exec(query string, sargs []driver.Value) (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 {
                resi, err := execer.Exec(query, sargs)