This is an automated email from the ASF dual-hosted git repository. jpoth pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new aa12e71 CAMEL-14000 - remove Endpoint from Map when corresponding Pool is empty new 240e821 Merge pull request #3186 from johnpoth/CAMEL-14000 aa12e71 is described below commit aa12e71935b7ee1e3d6ac444d10a18b10c730abc Author: John Poth <poth.j...@gmail.com> AuthorDate: Mon Sep 23 12:05:30 2019 +0200 CAMEL-14000 - remove Endpoint from Map when corresponding Pool is empty --- .../java/org/apache/camel/impl/engine/ServicePool.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/ServicePool.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/ServicePool.java index 40f0502..cf38275 100644 --- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/ServicePool.java +++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/ServicePool.java @@ -37,7 +37,7 @@ import org.slf4j.LoggerFactory; * A service pool is like a connection pool but can pool any kind of objects. * <p/> * Notice the capacity is <b>per key</b> which means that each key can contain at most - * (the capacity) services. The pool can contain an unbounded number of keys. + * (the capacity) services. The pool will contain at most (the capacity) number of keys. * <p/> * By default the capacity is set to 100. */ @@ -56,7 +56,8 @@ public class ServicePool<S extends Service> extends ServiceSupport implements No void release(S s); int size(); void stop(); - void evict(S s); + // returns true if the pool is empty + boolean evict(S s); } static class Key<S> { @@ -85,7 +86,9 @@ public class ServicePool<S extends Service> extends ServiceSupport implements No Endpoint e = getEndpoint.apply(s); Pool<S> p = pool.get(e); if (p != null) { - p.evict(s); + if (p.evict(s)) { + pool.remove(e); + } } } @@ -249,13 +252,14 @@ public class ServicePool<S extends Service> extends ServiceSupport implements No } @Override - public void evict(S s) { + public boolean evict(S s) { synchronized (this) { if (this.s == s) { this.s = null; } } doStop(s); + return true; } void doStop(S s) { @@ -309,9 +313,10 @@ public class ServicePool<S extends Service> extends ServiceSupport implements No } @Override - public void evict(S s) { + public boolean evict(S s) { queue.remove(s); ServicePool.stop(s); + return queue.isEmpty(); } }