aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/database/sql
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2014-05-07 11:54:29 -0700
committerBrad Fitzpatrick <bradfitz@golang.org>2014-05-07 11:54:29 -0700
commitce6b75dab634e272e0449f85853fca7f1850da8b (patch)
treeae0029f31ab06ce13bdfb3916ac6cba956799fa8 /src/pkg/database/sql
parent97aa90d251f6f2a951d01b7d1033bc7a42bf6f69 (diff)
downloadgo-ce6b75dab634e272e0449f85853fca7f1850da8b.tar.xz
database/sql: fix accounting of open connections
Existing test TestMaxOpenConns was failing occasionally, especially with higher values of GOMAXPROCS. Fixes #7532 LGTM=iant R=golang-codereviews, iant CC=golang-codereviews https://golang.org/cl/95130043
Diffstat (limited to 'src/pkg/database/sql')
-rw-r--r--src/pkg/database/sql/sql.go5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/pkg/database/sql/sql.go b/src/pkg/database/sql/sql.go
index 4874574c30..ef54dcdf91 100644
--- a/src/pkg/database/sql/sql.go
+++ b/src/pkg/database/sql/sql.go
@@ -652,13 +652,16 @@ func (db *DB) conn() (*driverConn, error) {
return conn, nil
}
+ db.numOpen++ // optimistically
db.mu.Unlock()
ci, err := db.driver.Open(db.dsn)
if err != nil {
+ db.mu.Lock()
+ db.numOpen-- // correct for earlier optimism
+ db.mu.Unlock()
return nil, err
}
db.mu.Lock()
- db.numOpen++
dc := &driverConn{
db: db,
ci: ci,