Commit d84dee06 authored by Daniel Theophanes's avatar Daniel Theophanes Committed by Russ Cox

[release-branch.go1.8] database/sql: ensure driverConns are closed if not returned to pool

Previously if a connection was requested but timed out during the
request and when acquiring the db.Lock the connection request
is fulfilled and the request is unable to be returned to the
connection pool, then then driver connection would not be closed.

No tests were added or modified because I was unable to determine
how to trigger this situation without something invasive.

Change-Id: I9d4dc680e3fdcf63d79d212174a5b8b313f363f1
Reviewed-on: https://go-review.googlesource.com/36641Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
Reviewed-on: https://go-review.googlesource.com/36714
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
parent f1e44a4b
...@@ -939,14 +939,14 @@ func (db *DB) conn(ctx context.Context, strategy connReuseStrategy) (*driverConn ...@@ -939,14 +939,14 @@ func (db *DB) conn(ctx context.Context, strategy connReuseStrategy) (*driverConn
// on it after removing. // on it after removing.
db.mu.Lock() db.mu.Lock()
delete(db.connRequests, reqKey) delete(db.connRequests, reqKey)
db.mu.Unlock()
select { select {
default: default:
case ret, ok := <-req: case ret, ok := <-req:
if ok { if ok {
db.putConnDBLocked(ret.conn, ret.err) db.putConn(ret.conn, ret.err)
} }
} }
db.mu.Unlock()
return nil, ctx.Err() return nil, ctx.Err()
case ret, ok := <-req: case ret, ok := <-req:
if !ok { if !ok {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment