Repository: commons-pool Updated Branches: refs/heads/master 928b3e78d -> 882c7f038
Refactor duplicate code. Closes #6. Project: http://git-wip-us.apache.org/repos/asf/commons-pool/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-pool/commit/882c7f03 Tree: http://git-wip-us.apache.org/repos/asf/commons-pool/tree/882c7f03 Diff: http://git-wip-us.apache.org/repos/asf/commons-pool/diff/882c7f03 Branch: refs/heads/master Commit: 882c7f0384069cf8f8cda3d508fd844870a7d3cf Parents: 928b3e7 Author: Yulin Wang <jieyeb...@gmail.com> Authored: Mon Jun 11 10:00:14 2018 -0600 Committer: Gary Gregory <garydgreg...@gmail.com> Committed: Mon Jun 11 10:00:14 2018 -0600 ---------------------------------------------------------------------- .../pool2/impl/BaseGenericObjectPool.java | 16 ++++++++ .../pool2/impl/GenericKeyedObjectPool.java | 39 +++++++++----------- .../commons/pool2/impl/GenericObjectPool.java | 9 +---- 3 files changed, 34 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-pool/blob/882c7f03/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java b/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java index 372cf87..aaaa7bc 100644 --- a/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java +++ b/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java @@ -40,6 +40,7 @@ import javax.management.ObjectName; import org.apache.commons.pool2.BaseObject; import org.apache.commons.pool2.PooledObject; +import org.apache.commons.pool2.PooledObjectState; import org.apache.commons.pool2.SwallowedExceptionListener; /** @@ -967,6 +968,21 @@ public abstract class BaseGenericObjectPool<T> extends BaseObject { } /** + * Marks the object as returning to the pool. + * @param pooledObject instance to return to the keyed pool + */ + protected void markReturningState(PooledObject<T> pooledObject) { + synchronized(pooledObject) { + final PooledObjectState state = pooledObject.getState(); + if (state != PooledObjectState.ALLOCATED) { + throw new IllegalStateException( + "Object has already been returned to this pool or is invalid"); + } + pooledObject.markReturning(); // Keep from being marked abandoned + } + } + + /** * Unregisters this pool's MBean. */ final void jmxUnregister() { http://git-wip-us.apache.org/repos/asf/commons-pool/blob/882c7f03/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java b/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java index 5d269fe..e80cd7e 100644 --- a/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java +++ b/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java @@ -473,14 +473,7 @@ public class GenericKeyedObjectPool<K,T> extends BaseGenericObjectPool<T> "Returned object not currently part of this pool"); } - synchronized(p) { - final PooledObjectState state = p.getState(); - if (state != PooledObjectState.ALLOCATED) { - throw new IllegalStateException( - "Object has already been returned to this pool or is invalid"); - } - p.markReturning(); // Keep from being marked abandoned (once GKOP does this) - } + markReturningState(p); final long activeTime = p.getActiveTimeMillis(); @@ -492,13 +485,7 @@ public class GenericKeyedObjectPool<K,T> extends BaseGenericObjectPool<T> } catch (final Exception e) { swallowException(e); } - if (objectDeque.idleObjects.hasTakeWaiters()) { - try { - addObject(key); - } catch (final Exception e) { - swallowException(e); - } - } + whenWaitersAddObject(key, objectDeque.idleObjects); return; } } @@ -512,13 +499,7 @@ public class GenericKeyedObjectPool<K,T> extends BaseGenericObjectPool<T> } catch (final Exception e) { swallowException(e); } - if (objectDeque.idleObjects.hasTakeWaiters()) { - try { - addObject(key); - } catch (final Exception e) { - swallowException(e); - } - } + whenWaitersAddObject(key, objectDeque.idleObjects); return; } @@ -558,6 +539,20 @@ public class GenericKeyedObjectPool<K,T> extends BaseGenericObjectPool<T> } } + /** + * Whether there is at least one thread waiting on this deque, add an pool object. + * @param key + * @param idleObjects + */ + private void whenWaitersAddObject(final K key, LinkedBlockingDeque<PooledObject<T>> idleObjects) { + if (idleObjects.hasTakeWaiters()) { + try { + addObject(key); + } catch (final Exception e) { + swallowException(e); + } + } + } /** * {@inheritDoc} http://git-wip-us.apache.org/repos/asf/commons-pool/blob/882c7f03/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java b/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java index 2928c25..c41b5c2 100644 --- a/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java +++ b/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java @@ -536,14 +536,7 @@ public class GenericObjectPool<T> extends BaseGenericObjectPool<T> return; // Object was abandoned and removed } - synchronized(p) { - final PooledObjectState state = p.getState(); - if (state != PooledObjectState.ALLOCATED) { - throw new IllegalStateException( - "Object has already been returned to this pool or is invalid"); - } - p.markReturning(); // Keep from being marked abandoned - } + markReturningState(p); final long activeTime = p.getActiveTimeMillis();