diff options
| author | Brad Fitzpatrick <bradfitz@golang.org> | 2011-12-12 13:56:56 -0800 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2011-12-12 13:56:56 -0800 |
| commit | 06a9bc683518552991820581cb8a4cf5e6978d47 (patch) | |
| tree | 06f3e831f78618200c354a2f66afea23f9ccbca4 /src/pkg/exp/sql | |
| parent | 3dc278d3e2678ad7c7953fac5ae8ad641fe4bd6e (diff) | |
| download | go-06a9bc683518552991820581cb8a4cf5e6978d47.tar.xz | |
sql: fix missing mutex unlock in an error case
Fixes #2542
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5483054
Diffstat (limited to 'src/pkg/exp/sql')
| -rw-r--r-- | src/pkg/exp/sql/sql.go | 1 | ||||
| -rw-r--r-- | src/pkg/exp/sql/sql_test.go | 13 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/pkg/exp/sql/sql.go b/src/pkg/exp/sql/sql.go index f17d12eaa1..948b911f2e 100644 --- a/src/pkg/exp/sql/sql.go +++ b/src/pkg/exp/sql/sql.go @@ -134,6 +134,7 @@ func (db *DB) maxIdleConns() int { func (db *DB) conn() (driver.Conn, error) { db.mu.Lock() if db.closed { + db.mu.Unlock() return nil, errors.New("sql: database is closed") } if n := len(db.freeConn); n > 0 { diff --git a/src/pkg/exp/sql/sql_test.go b/src/pkg/exp/sql/sql_test.go index 4f8318d26e..f8ccf764e7 100644 --- a/src/pkg/exp/sql/sql_test.go +++ b/src/pkg/exp/sql/sql_test.go @@ -228,3 +228,16 @@ func TestTxStmt(t *testing.T) { t.Fatalf("Commit = %v", err) } } + +// Tests fix for issue 2542, that we release a lock when querying on +// a closed connection. +func TestIssue2542Deadlock(t *testing.T) { + db := newTestDB(t, "people") + closeDB(t, db) + for i := 0; i < 2; i++ { + _, err := db.Query("SELECT|people|age,name|") + if err == nil { + t.Fatalf("expected error") + } + } +} |
