diff --git a/src/main/java/org/commonjava/util/jhttpc/INTERNAL/conn/ConnectionManagerCache.java b/src/main/java/org/commonjava/util/jhttpc/INTERNAL/conn/ConnectionManagerCache.java index fdb0cca..f1de480 100644 --- a/src/main/java/org/commonjava/util/jhttpc/INTERNAL/conn/ConnectionManagerCache.java +++ b/src/main/java/org/commonjava/util/jhttpc/INTERNAL/conn/ConnectionManagerCache.java @@ -106,6 +106,7 @@ public boolean shutdownNow() } catch ( InterruptedException e ) { + Thread.currentThread().interrupt(); logger.warn( "Interrupted while shutting down connection manager cache." ); } @@ -125,28 +126,33 @@ private synchronized boolean doShutdown( Function svc = new ExecutorCompletionService<>( exec ); - cache.forEach( ( config, tracker ) -> svc.submit( () -> shutdownAction.apply( tracker ) ) ); - - boolean result = true; - while ( counter.getAndDecrement() > 0 ) + try { - try - { - result = result && svc.take().get(); - } - catch ( ExecutionException e ) + ExecutorCompletionService svc = new ExecutorCompletionService<>( exec ); + int submitted = cache.size(); + cache.values().forEach( tracker -> svc.submit( () -> shutdownAction.apply( tracker ) ) ); + boolean result = true; + for ( int i = 0; i < submitted; i++ ) { - logger.warn( "Error executing shutdown of connection managers." ); - result = false; + try + { + boolean shutDown = svc.take().get(); + result = result && shutDown; + } + catch ( ExecutionException e ) + { + logger.warn( "Error executing shutdown of connection managers.", e ); + result = false; + } } - } - timer.cancel(); - shutdown = true; - cache.clear(); - - return result; + return result; + } + finally + { + exec.shutdown(); + timer.cancel(); + } } @Override