]> Cypherpunks repositories - gostls13.git/commitdiff
database/sql: fix accounting of open connections
authorBrad Fitzpatrick <bradfitz@golang.org>
Wed, 7 May 2014 18:54:29 +0000 (11:54 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 7 May 2014 18:54:29 +0000 (11:54 -0700)
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

src/pkg/database/sql/sql.go

index 4874574c30b1be2d94af05307372bfb8b330b84b..ef54dcdf91de74f70ea0fc3148e6ac5b3199f234 100644 (file)
@@ -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,