From: Philip Roberts Date: Thu, 9 Mar 2023 11:16:56 +0000 (+0000) Subject: database/sql: wake cleaner if maxIdleTime set to less than maxLifetime X-Git-Tag: go1.25rc1~454 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=7b263895f7dbe81ddd7c0fc399e6a9ae6fe2f5bf;p=gostls13.git database/sql: wake cleaner if maxIdleTime set to less than maxLifetime The existing implementation wouldn't wake the connection cleaner if maxIdleTime was set to a value less than maxLifetime while an existing connection was open - resulting in idle connections not being discarded until after the first maxLifetime had passed. Fixes #45993 Change-Id: I074ed7ba9803354c8b3a41f2625ae0d8a7d5059b GitHub-Last-Rev: 0d149d8d38bc9c2ad42a2a20dcfc73994d54fe23 GitHub-Pull-Request: golang/go#58490 Reviewed-on: https://go-review.googlesource.com/c/go/+/467655 Auto-Submit: Sean Liao LUCI-TryBot-Result: Go LUCI Reviewed-by: Sean Liao Reviewed-by: Dmitri Shuralyov Reviewed-by: Daniel Theophanes Reviewed-by: Michael Pratt --- diff --git a/src/database/sql/sql.go b/src/database/sql/sql.go index eddb647ed0..b0abcf7fcd 100644 --- a/src/database/sql/sql.go +++ b/src/database/sql/sql.go @@ -1050,7 +1050,7 @@ func (db *DB) SetConnMaxLifetime(d time.Duration) { } db.mu.Lock() // Wake cleaner up when lifetime is shortened. - if d > 0 && d < db.maxLifetime && db.cleanerCh != nil { + if d > 0 && d < db.shortestIdleTimeLocked() && db.cleanerCh != nil { select { case db.cleanerCh <- struct{}{}: default: @@ -1074,7 +1074,7 @@ func (db *DB) SetConnMaxIdleTime(d time.Duration) { defer db.mu.Unlock() // Wake cleaner up when idle time is shortened. - if d > 0 && d < db.maxIdleTime && db.cleanerCh != nil { + if d > 0 && d < db.shortestIdleTimeLocked() && db.cleanerCh != nil { select { case db.cleanerCh <- struct{}{}: default: