Author: markt
Date: Wed Mar 23 12:08:15 2011
New Revision: 1084557
URL: http://svn.apache.org/viewvc?rev=1084557&view=rev
Log:
Fix POOL-179. Correctly handle InterruptedException whilst waiting for an
object from the pool.
Based on a suggested patch by Axel Großmann
Modified:
commons/proper/pool/branches/POOL_1_X/src/java/org/apache/commons/pool/impl/GenericKeyedObjectPool.java
commons/proper/pool/branches/POOL_1_X/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
Modified:
commons/proper/pool/branches/POOL_1_X/src/java/org/apache/commons/pool/impl/GenericKeyedObjectPool.java
URL:
http://svn.apache.org/viewvc/commons/proper/pool/branches/POOL_1_X/src/java/org/apache/commons/pool/impl/GenericKeyedObjectPool.java?rev=1084557&r1=1084556&r2=1084557&view=diff
==============================================================================
---
commons/proper/pool/branches/POOL_1_X/src/java/org/apache/commons/pool/impl/GenericKeyedObjectPool.java
(original)
+++
commons/proper/pool/branches/POOL_1_X/src/java/org/apache/commons/pool/impl/GenericKeyedObjectPool.java
Wed Mar 23 12:08:15 2011
@@ -1152,12 +1152,21 @@ public class GenericKeyedObjectPool exte
}
} catch(InterruptedException e) {
synchronized (this) {
- // Make sure allocate hasn't already
assigned an object
- // in a different thread or permitted a
new object to be created
+ // Need to handle the all three
possibilities
if (latch.getPair() == null &&
!latch.mayCreate()) {
+ // Case 1: latch still in allocation
queue
+ // Remove latch from the allocation
queue
_allocationQueue.remove(latch);
+ } else if (latch.getPair() == null &&
latch.mayCreate()) {
+ // Case 2: latch has been given
permission to create
+ // a new object
+
latch.getPool().decrementInternalProcessingCount();
+ allocate();
} else {
- break;
+ // Case 3: An object has been allocated
+
latch.getPool().decrementInternalProcessingCount();
+ latch.getPool().incrementActiveCount();
+ returnObject(latch.getkey(),
latch.getPair().getValue());
}
}
Thread.currentThread().interrupt();
Modified:
commons/proper/pool/branches/POOL_1_X/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
URL:
http://svn.apache.org/viewvc/commons/proper/pool/branches/POOL_1_X/src/java/org/apache/commons/pool/impl/GenericObjectPool.java?rev=1084557&r1=1084556&r2=1084557&view=diff
==============================================================================
---
commons/proper/pool/branches/POOL_1_X/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
(original)
+++
commons/proper/pool/branches/POOL_1_X/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
Wed Mar 23 12:08:15 2011
@@ -1118,13 +1118,21 @@ public class GenericObjectPool extends B
}
} catch(InterruptedException e) {
synchronized(this) {
- // Make sure allocate hasn't already
assigned an object
- // in a different thread or permitted a
new object to be created
+ // Need to handle the all three
possibilities
if (latch.getPair() == null &&
!latch.mayCreate()) {
+ // Case 1: latch still in allocation
queue
// Remove latch from the allocation
queue
_allocationQueue.remove(latch);
+ } else if (latch.getPair() == null &&
latch.mayCreate()) {
+ // Case 2: latch has been given
permission to create
+ // a new object
+ _numInternalProcessing--;
+ allocate();
} else {
- break;
+ // Case 3: An object has been allocated
+ _numInternalProcessing--;
+ _numActive++;
+
returnObject(latch.getPair().getValue());
}
}
Thread.currentThread().interrupt();