This is an automated email from the ASF dual-hosted git repository.

rmaucher pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 6a0ca81779d1bb1b5b96c24dbd58cd6ab4db2088
Author: opencode <[email protected]>
AuthorDate: Thu Nov 5 17:22:59 2026 +0100

    Qualify the checkIdle minIdle floor contract
    
    checkIdle() promised that the eviction pass stops at the minIdle floor, but 
a purge-stale connection is released without the total-size guard, so an 
explicit call after a purge can take the pool below it. Document both behaviors.
---
 .../org/apache/tomcat/jdbc/pool/jmx/ConnectionPoolMBean.java     | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git 
a/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPoolMBean.java
 
b/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPoolMBean.java
index 1a192f3fa7..b3833fb4ee 100644
--- 
a/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPoolMBean.java
+++ 
b/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPoolMBean.java
@@ -158,10 +158,11 @@ public interface ConnectionPoolMBean extends 
PoolConfiguration {
     /**
      * Runs the idle-eviction pass over the connections that are currently 
idle. An idle connection the configuration
      * says should be evicted - one that has been idle past {@code 
minEvictableIdleTimeMillis}, or one a
-     * {@link #purgeOnReturn()} or {@link #purge()} call made stale - is 
released, and the pass stops at the
-     * {@code minIdle} floor. An idle connection a borrower claims while this 
runs is left to that borrower. This is
-     * the pass the pool cleaner runs on its own timer, run on demand, and 
what it releases is counted by
-     * {@link #getReleasedIdleCount()}.
+     * {@link #purgeOnReturn()} or {@link #purge()} call made stale - is 
released, and the pass normally stops at the
+     * {@code minIdle} floor. A connection a purge made stale is released 
regardless of that floor, so an explicit
+     * call after a purge can take the pool below it. An idle connection a 
borrower claims while this runs is left to
+     * that borrower. This is the pass the pool cleaner runs on its own timer, 
run on demand, and what it releases is
+     * counted by {@link #getReleasedIdleCount()}.
      */
     void checkIdle();
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to