Skip to content

fix(pool): Fix Close. Do healthchecks only on idle conns#3805

Merged
ndyakov merged 3 commits intomasterfrom
ndyakov/fix-pool-close
May 8, 2026
Merged

fix(pool): Fix Close. Do healthchecks only on idle conns#3805
ndyakov merged 3 commits intomasterfrom
ndyakov/fix-pool-close

Conversation

@ndyakov
Copy link
Copy Markdown
Member

@ndyakov ndyakov commented May 7, 2026

In a rare corner case (actually observed in the CI), if the pool is closed while a connection is in use there will be a data race, since the connection that the pool.Close is trying to execute a healthcheck on (which peeks the socket) is currently being used.


Note

Medium Risk
Changes shutdown behavior in the connection pool by skipping socket/reader peeks for non-idle connections, which reduces race risk but could mask close errors for in-use connections during Close().

Overview
Fixes a shutdown-time data race by changing ConnPool.Close() to run isHealthyConn only for connections that are currently idle, and to treat non-idle connections as healthy for the purpose of deciding whether to surface close errors.

Also updates Conn.readerMu documentation to reflect that the reader lock is used for both handoff and health-check-related peek operations.

Reviewed by Cursor Bugbot for commit 91a40cf. Bugbot is set up for automated code reviews on this repo. Configure here.

@jit-ci
Copy link
Copy Markdown

jit-ci Bot commented May 7, 2026

🛡️ Jit Security Scan Results

CRITICAL HIGH MEDIUM

✅ No security findings were detected in this PR


Security scan by Jit

@ndyakov ndyakov merged commit 85bca80 into master May 8, 2026
67 of 69 checks passed
@ndyakov ndyakov deleted the ndyakov/fix-pool-close branch May 8, 2026 09:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants