This is an automated email from the ASF dual-hosted git repository. coheigea pushed a commit to branch 3.2.x-fixes in repository https://gitbox.apache.org/repos/asf/cxf.git
commit d40da6aa1046f6fa519ab1a875f8126df31ff83c Author: Colm O hEigeartaigh <[email protected]> AuthorDate: Tue Oct 16 12:05:04 2018 +0100 CXF-7869 - Infinite loop in rest client (cherry picked from commit 3fec78a935410d894add5490cd36d15603828509) --- .../java/org/apache/cxf/jaxrs/client/spec/ClientImpl.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientImpl.java b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientImpl.java index 61c465a..85cb49f 100644 --- a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientImpl.java +++ b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientImpl.java @@ -74,7 +74,8 @@ public class ClientImpl implements Client { private TLSConfiguration secConfig; private boolean closed; private Set<WebClient> baseClients = - Collections.newSetFromMap(new WeakHashMap<WebClient, Boolean>()); + Collections.synchronizedSet(Collections.newSetFromMap(new WeakHashMap<WebClient, Boolean>())); + public ClientImpl(Configuration config, TLSConfiguration secConfig) { configImpl = new ClientConfigurableImpl<Client>(this, config); @@ -84,8 +85,10 @@ public class ClientImpl implements Client { @Override public void close() { if (!closed) { - for (WebClient wc : baseClients) { - wc.close(); + synchronized (baseClients) { + for (WebClient wc : baseClients) { + wc.close(); + } } baseClients = null; closed = true; @@ -276,7 +279,7 @@ public class ClientImpl implements Client { providers.add(p); } else { final Class<?> providerCls = ClassHelper.getRealClass(pf.getBus(), p); - providers.add(new FilterProviderInfo<Object>(p.getClass(), + providers.add(new FilterProviderInfo<Object>(p.getClass(), providerCls, p, pf.getBus(), contracts)); } } @@ -553,8 +556,8 @@ public class ClientImpl implements Client { } } private static Long getLongValue(Object o) { - return o instanceof Long ? (Long)o - : o instanceof String ? Long.valueOf(o.toString()) + return o instanceof Long ? (Long)o + : o instanceof String ? Long.valueOf(o.toString()) : o instanceof Integer ? ((Integer)o).longValue() : null; } private static Integer getIntValue(Object o) {
