diff options
author | Bjørn Christian Seime <bjorncs@oath.com> | 2018-08-14 09:37:10 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@oath.com> | 2018-08-14 09:41:41 +0200 |
commit | ae5305ed904e50965d17a385963fb38049f94dec (patch) | |
tree | 0c683f3cfe6851daa3d64f3c1d1d0b8c2f4740ef /vespa-athenz | |
parent | 554cf0c4dc19393c31cfd41ea143b87e93fef8c7 (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.java | 8 |
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 { |