From cce127a75f72110c045319407a652829b5a5b716 Mon Sep 17 00:00:00 2001 From: Jiong Du Date: Tue, 30 Dec 2014 16:12:50 +0800 Subject: database/sql: close connection if db.numOpen > db.maxOpen Bug Description: When reduce db.maxOpen via db.SetMaxOpenConns, the unnecssary connections won't been released until all other connections are free. Fixes #9453 Change-Id: I9afb2e4b184139b31029ae53d7f5fd1fdb8d8d7e Reviewed-on: https://go-review.googlesource.com/2200 Reviewed-by: Brad Fitzpatrick --- src/database/sql/sql.go | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/database/sql/sql.go') diff --git a/src/database/sql/sql.go b/src/database/sql/sql.go index b0e8894673..0a84163a03 100644 --- a/src/database/sql/sql.go +++ b/src/database/sql/sql.go @@ -782,6 +782,9 @@ func (db *DB) putConn(dc *driverConn, err error) { // If a connRequest was fulfilled or the *driverConn was placed in the // freeConn list, then true is returned, otherwise false is returned. func (db *DB) putConnDBLocked(dc *driverConn, err error) bool { + if db.maxOpen > 0 && db.numOpen > db.maxOpen { + return false + } if c := len(db.connRequests); c > 0 { req := db.connRequests[0] // This copy is O(n) but in practice faster than a linked list. -- cgit v1.3