summaryrefslogtreecommitdiffstats
path: root/vespa-athenz
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@oath.com>2018-08-14 09:37:10 +0200
committerBjørn Christian Seime <bjorncs@oath.com>2018-08-14 09:41:41 +0200
commitae5305ed904e50965d17a385963fb38049f94dec (patch)
tree0c683f3cfe6851daa3d64f3c1d1d0b8c2f4740ef /vespa-athenz
parent554cf0c4dc19393c31cfd41ea143b87e93fef8c7 (diff)
Misc improvements to close()
- Make close() idempotent - Disallow execute() after close() - Add redundant guards to refer()/release()
Diffstat (limited to 'vespa-athenz')
-rw-r--r--vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/SiaBackedApacheHttpClient.java8
1 files changed, 8 insertions, 0 deletions
diff --git a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/SiaBackedApacheHttpClient.java b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/SiaBackedApacheHttpClient.java
index fc632e42063..588ed5c7abd 100644
--- a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/SiaBackedApacheHttpClient.java
+++ b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/SiaBackedApacheHttpClient.java
@@ -23,6 +23,7 @@ public class SiaBackedApacheHttpClient implements AutoCloseable {
private final Supplier<SSLContext> sslContextSupplier;
private final HttpClientFactory httpClientFactory;
private HttpClientHolder client;
+ private boolean closed = false;
public SiaBackedApacheHttpClient(ServiceIdentityProvider identityProvider,
HttpClientFactory httpClientFactory) {
@@ -57,6 +58,7 @@ public class SiaBackedApacheHttpClient implements AutoCloseable {
private HttpClientHolder getClient() {
synchronized (clientLock) {
+ if (closed) throw new IllegalStateException("Client has been closed!");
if (sslContextSupplier.get() != client.sslContext) {
client.release();
client = new HttpClientHolder(httpClientFactory, sslContextSupplier);
@@ -65,10 +67,15 @@ public class SiaBackedApacheHttpClient implements AutoCloseable {
}
}
+ /**
+ * Thread-safe and idempotent.
+ */
@Override
public void close() {
synchronized (clientLock) {
+ if (closed) return;
client.release();
+ closed = true;
}
}
@@ -92,6 +99,7 @@ public class SiaBackedApacheHttpClient implements AutoCloseable {
}
void release() {
+ if (referenceCount == 0) throw new IllegalStateException("Client already closed!");
--referenceCount;
if (referenceCount == 0) {
try {