diff options
| author | Alex Brainman <alex.brainman@gmail.com> | 2013-07-23 14:09:53 +1000 |
|---|---|---|
| committer | Alex Brainman <alex.brainman@gmail.com> | 2013-07-23 14:09:53 +1000 |
| commit | a293065a39963ef2efb4cc133e286d2d97b356a9 (patch) | |
| tree | edac82f09ad3f482c631653b0b4ca1a514bd34fb /src/pkg/database/sql | |
| parent | abe384f68a8572e94acea0f3966cc72cbedd9c29 (diff) | |
| download | go-a293065a39963ef2efb4cc133e286d2d97b356a9.tar.xz | |
database/sql: close statement before connection
Fixes #5936
R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/11620046
Diffstat (limited to 'src/pkg/database/sql')
| -rw-r--r-- | src/pkg/database/sql/sql.go | 2 | ||||
| -rw-r--r-- | src/pkg/database/sql/sql_test.go | 14 |
2 files changed, 15 insertions, 1 deletions
diff --git a/src/pkg/database/sql/sql.go b/src/pkg/database/sql/sql.go index ebb7f440e0..35d5338c56 100644 --- a/src/pkg/database/sql/sql.go +++ b/src/pkg/database/sql/sql.go @@ -759,10 +759,10 @@ func (db *DB) queryConn(dc *driverConn, releaseConn func(error), query string, a ds := driverStmt{dc, si} rowsi, err := rowsiFromStatement(ds, args...) if err != nil { - releaseConn(err) dc.Lock() si.Close() dc.Unlock() + releaseConn(err) return nil, err } diff --git a/src/pkg/database/sql/sql_test.go b/src/pkg/database/sql/sql_test.go index e6cc667fa9..fc620bd6dc 100644 --- a/src/pkg/database/sql/sql_test.go +++ b/src/pkg/database/sql/sql_test.go @@ -1046,6 +1046,20 @@ func TestRowsCloseOrder(t *testing.T) { } } +func TestStmtCloseOrder(t *testing.T) { + db := newTestDB(t, "people") + defer closeDB(t, db) + + db.SetMaxIdleConns(0) + setStrictFakeConnClose(t) + defer setStrictFakeConnClose(nil) + + _, err := db.Query("SELECT|non_existent|name|") + if err == nil { + t.Fatal("Quering non-existent table should fail") + } +} + func manyConcurrentQueries(t testOrBench) { maxProcs, numReqs := 16, 500 if testing.Short() { |
