You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ma...@apache.org on 2009/05/20 23:04:11 UTC
svn commit: r776855 -
/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
Author: markt
Date: Wed May 20 21:04:11 2009
New Revision: 776855
URL: http://svn.apache.org/viewvc?rev=776855&view=rev
Log:
Address remaining concerns in POOL-137. Sync access to Latch objects as they are used across multiple threads.
Modified:
commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
Modified: commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java?rev=776855&r1=776854&r2=776855&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java (original)
+++ commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/GenericObjectPool.java Wed May 20 21:04:11 2009
@@ -960,9 +960,9 @@
}
// If no object was allocated from the pool above
- if(latch._pair == null) {
+ if(latch.getPair() == null) {
// check if we were allowed to create one
- if(latch._mayCreate) {
+ if(latch.mayCreate()) {
// allow new object to be created
} else {
// the pool is exhausted
@@ -1007,10 +1007,10 @@
}
boolean newlyCreated = false;
- if(null == latch._pair) {
+ if(null == latch.getPair()) {
try {
Object obj = _factory.makeObject();
- latch._pair = new ObjectTimestampPair(obj);
+ latch.setPair(new ObjectTimestampPair(obj));
newlyCreated = true;
} finally {
if (!newlyCreated) {
@@ -1025,20 +1025,21 @@
}
// activate & validate the object
try {
- _factory.activateObject(latch._pair.value);
- if(_testOnBorrow && !_factory.validateObject(latch._pair.value)) {
+ _factory.activateObject(latch.getPair().value);
+ if(_testOnBorrow &&
+ !_factory.validateObject(latch.getPair().value)) {
throw new Exception("ValidateObject failed");
}
synchronized(this) {
_numInternalProcessing--;
_numActive++;
}
- return latch._pair.value;
+ return latch.getPair().value;
}
catch (Throwable e) {
// object cannot be activated or is invalid
try {
- _factory.destroyObject(latch._pair.value);
+ _factory.destroyObject(latch.getPair().value);
} catch (Throwable e2) {
// cannot destroy broken object
}
@@ -1070,7 +1071,7 @@
for (;;) {
if (!_pool.isEmpty() && !_allocationQueue.isEmpty()) {
Latch latch = (Latch) _allocationQueue.removeFirst();
- latch._pair = (ObjectTimestampPair) _pool.removeFirst();
+ latch.setPair((ObjectTimestampPair) _pool.removeFirst());
_numInternalProcessing++;
synchronized (latch) {
latch.notify();
@@ -1084,7 +1085,7 @@
for(;;) {
if((!_allocationQueue.isEmpty()) && (_maxActive < 0 || (_numActive + _numInternalProcessing) < _maxActive)) {
Latch latch = (Latch) _allocationQueue.removeFirst();
- latch._mayCreate = true;
+ latch.setMayCreate(true);
_numInternalProcessing++;
synchronized (latch) {
latch.notify();
@@ -1563,14 +1564,28 @@
* threads request objects.
*/
private static final class Latch {
- ObjectTimestampPair _pair;
- boolean _mayCreate = false;
+ private ObjectTimestampPair _pair;
+ private boolean _mayCreate = false;
+ private synchronized ObjectTimestampPair getPair() {
+ return _pair;
+ }
+ private synchronized void setPair(ObjectTimestampPair pair) {
+ _pair = pair;
+ }
+
+ private synchronized boolean mayCreate() {
+ return _mayCreate;
+ }
+ private synchronized void setMayCreate(boolean mayCreate) {
+ _mayCreate = mayCreate;
+ }
+
/**
* Reset the latch data. Used when an allocation fails and the latch
* needs to be re-added to the queue.
*/
- private void reset() {
+ private synchronized void reset() {
_pair = null;
_mayCreate = false;
}