From 37db8804691f0a5e618cbc041909895c9709263c Mon Sep 17 00:00:00 2001 From: Alberto GarcĂ­a Hierro Date: Wed, 16 Oct 2013 09:22:57 -0700 Subject: database/sql: Fix connection leak and potential deadlock CL 10726044 introduced a race condition which causes connections to be leaked under certain circumstances. If SetMaxOpenConns is used, the application eventually deadlocks. Otherwise, the number of open connections just keep growing indefinitely. Fixes #6593 R=golang-dev, bradfitz, tad.glines, bketelsen CC=golang-dev https://golang.org/cl/14611045 --- src/pkg/database/sql/sql.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/pkg/database/sql/sql.go') diff --git a/src/pkg/database/sql/sql.go b/src/pkg/database/sql/sql.go index fe46ff3781..3047735acc 100644 --- a/src/pkg/database/sql/sql.go +++ b/src/pkg/database/sql/sql.go @@ -593,9 +593,12 @@ func (db *DB) openNewConnection() { db: db, ci: ci, } - db.addDepLocked(dc, dc) - db.numOpen++ - db.putConnDBLocked(dc, err) + if db.putConnDBLocked(dc, err) { + db.addDepLocked(dc, dc) + db.numOpen++ + } else { + ci.Close() + } } // connRequest represents one request for a new connection -- cgit v1.3