Author: rdonkin
Date: Thu Nov 3 11:47:38 2005
New Revision: 330616
URL: http://svn.apache.org/viewcvs?rev=330616&view=rev
Log:
Fix for bug that could (in certain circumstances) result in the pool blocking
for up to twice the desired maximum. Spotted by Sandy McArthur. Issue #37337.
Modified:
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericKeyedObjectPool.java
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
Modified:
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericKeyedObjectPool.java
URL:
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericKeyedObjectPool.java?rev=330616&r1=330615&r2=330616&view=diff
==============================================================================
---
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericKeyedObjectPool.java
(original)
+++
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericKeyedObjectPool.java
Thu Nov 3 11:47:38 2005
@@ -811,7 +811,14 @@
if(_maxWait <= 0) {
wait();
} else {
- wait(_maxWait);
+ // this code may be executed again after a
notify then continue cycle
+ // so, need to calculate the amount of
time to wait
+ final long elapsed =
(System.currentTimeMillis() - starttime);
+ final long waitTime = _maxWait - elapsed;
+ if (waitTime > 0)
+ {
+ wait(waitTime);
+ }
}
} catch(InterruptedException e) {
// ignored
Modified:
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
URL:
http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java?rev=330616&r1=330615&r2=330616&view=diff
==============================================================================
---
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
(original)
+++
jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
Thu Nov 3 11:47:38 2005
@@ -799,7 +799,14 @@
if(_maxWait <= 0) {
wait();
} else {
- wait(_maxWait);
+ // this code may be executed again after a
notify then continue cycle
+ // so, need to calculate the amount of
time to wait
+ final long elapsed =
(System.currentTimeMillis() - starttime);
+ final long waitTime = _maxWait - elapsed;
+ if (waitTime > 0)
+ {
+ wait(waitTime);
+ }
}
} catch(InterruptedException e) {
// ignored
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]