aboutsummaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-02-21 12:45:29 +0100
committerHarald Musum <musum@verizonmedia.com>2020-02-21 12:45:29 +0100
commitcc4419f026947c6f3b8d1a4943d8caa94cb3bb74 (patch)
tree7a62c508392233f04e5b18e1a5ae25f7e7b040d2 /config
parent25bcc44fcf22a5e4737d6d4551b4a292bc04d4e0 (diff)
Handle subscriber being called multiple times
Also check for no pool found when releasing a connection pool
Diffstat (limited to 'config')
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java1
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/JRTManagedConnectionPools.java9
2 files changed, 7 insertions, 3 deletions
diff --git a/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java b/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java
index 2873855d1c2..3891d710fa3 100644
--- a/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java
+++ b/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java
@@ -319,6 +319,7 @@ public class ConfigSubscriber implements AutoCloseable {
@Override
public void close() {
synchronized (monitor) {
+ if (state == State.CLOSED) return;
state = State.CLOSED;
}
for (ConfigHandle<? extends ConfigInstance> h : subscriptionHandles) {
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/JRTManagedConnectionPools.java b/config/src/main/java/com/yahoo/config/subscription/impl/JRTManagedConnectionPools.java
index 0a606416827..32d2d962e4d 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/JRTManagedConnectionPools.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/JRTManagedConnectionPools.java
@@ -29,7 +29,8 @@ public class JRTManagedConnectionPools {
count = 0;
}
}
- private Map<ConfigSourceSet, CountedPool> pools = new HashMap<>();
+
+ private final Map<ConfigSourceSet, CountedPool> pools = new HashMap<>();
public JRTConfigRequester acquire(ConfigSourceSet sourceSet, TimingValues timingValues) {
CountedPool countedPool;
@@ -43,12 +44,14 @@ public class JRTManagedConnectionPools {
}
return new JRTConfigRequester(sourceSet, countedPool.scheduler, countedPool.pool, timingValues);
}
+
public synchronized void release(ConfigSourceSet sourceSet) {
CountedPool countedPool;
synchronized (pools) {
countedPool = pools.get(sourceSet);
- countedPool.count--;
- if (countedPool.count > 0) return;
+ if (countedPool != null)
+ countedPool.count--;
+ if (countedPool == null || countedPool.count > 0) return;
pools.remove(sourceSet);
}