From c45f1532daafd835d1f035b14bdb8ae8c9b8a61e Mon Sep 17 00:00:00 2001 From: MCoulombe727 Date: Fri, 9 Mar 2018 12:39:58 -0500 Subject: [PATCH] Fix the race condition with the GC since the ConcurrentReferenceHashMap holds soft references to clients. (#6) Fixes gh-5 --- .../openfeign/ribbon/CachingSpringLoadBalancerFactory.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/ribbon/CachingSpringLoadBalancerFactory.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/ribbon/CachingSpringLoadBalancerFactory.java index 975c8718..7b743c99 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/ribbon/CachingSpringLoadBalancerFactory.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/ribbon/CachingSpringLoadBalancerFactory.java @@ -98,13 +98,14 @@ public class CachingSpringLoadBalancerFactory { } public FeignLoadBalancer create(String clientName) { - if (this.cache.containsKey(clientName)) { - return this.cache.get(clientName); + FeignLoadBalancer client = this.cache.get(clientName); + if(client != null) { + return client; } IClientConfig config = this.factory.getClientConfig(clientName); ILoadBalancer lb = this.factory.getLoadBalancer(clientName); ServerIntrospector serverIntrospector = this.factory.getInstance(clientName, ServerIntrospector.class); - FeignLoadBalancer client = enableRetry ? new RetryableFeignLoadBalancer(lb, config, serverIntrospector, + client = enableRetry ? new RetryableFeignLoadBalancer(lb, config, serverIntrospector, loadBalancedRetryPolicyFactory, loadBalancedBackOffPolicyFactory, loadBalancedRetryListenerFactory) : new FeignLoadBalancer(lb, config, serverIntrospector); this.cache.put(clientName, client); return client;