Skip to content

Commit 3cdf8ba

Browse files
committed
database/sql: fix Conn leak
Fixes #4902 R=golang-dev, alex.brainman, r, google CC=golang-dev https://golang.org/cl/7579045
1 parent 1a4599b commit 3cdf8ba

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

src/pkg/database/sql/sql.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,7 @@ func (db *DB) prepare(query string) (*Stmt, error) {
445445
css: []connStmt{{ci, si}},
446446
}
447447
db.addDep(stmt, stmt)
448+
db.putConn(ci, nil)
448449
return stmt, nil
449450
}
450451

src/pkg/database/sql/sql_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,3 +708,32 @@ func TestQueryRowNilScanDest(t *testing.T) {
708708
t.Errorf("error = %q; want %q", err.Error(), want)
709709
}
710710
}
711+
712+
func TestIssue4902(t *testing.T) {
713+
db := newTestDB(t, "people")
714+
defer closeDB(t, db)
715+
716+
driver := db.driver.(*fakeDriver)
717+
opens0 := driver.openCount
718+
719+
var stmt *Stmt
720+
var err error
721+
for i := 0; i < 10; i++ {
722+
stmt, err = db.Prepare("SELECT|people|name|")
723+
if err != nil {
724+
t.Fatal(err)
725+
}
726+
err = stmt.Close()
727+
if err != nil {
728+
t.Fatal(err)
729+
}
730+
}
731+
732+
opens := driver.openCount - opens0
733+
if opens > 1 {
734+
t.Errorf("opens = %d; want <= 1", opens)
735+
t.Logf("db = %#v", db)
736+
t.Logf("driver = %#v", driver)
737+
t.Logf("stmt = %#v", stmt)
738+
}
739+
}

0 commit comments

Comments
 (0)