diff --git a/src/main/java/com/squareup/okhttp/ConnectionPool.java b/src/main/java/com/squareup/okhttp/ConnectionPool.java index 438fe91db..66462037f 100644 --- a/src/main/java/com/squareup/okhttp/ConnectionPool.java +++ b/src/main/java/com/squareup/okhttp/ConnectionPool.java @@ -241,4 +241,17 @@ public class ConnectionPool { } } } + + /** Close and remove all connections in the pool. */ + public void evictAll() { + List connections; + synchronized (this) { + connections = new ArrayList(this.connections); + this.connections.clear(); + } + + for (Connection connection : connections) { + Util.closeQuietly(connection); + } + } } diff --git a/src/test/java/com/squareup/okhttp/ConnectionPoolTest.java b/src/test/java/com/squareup/okhttp/ConnectionPoolTest.java index dca9625bd..515453e08 100644 --- a/src/test/java/com/squareup/okhttp/ConnectionPoolTest.java +++ b/src/test/java/com/squareup/okhttp/ConnectionPoolTest.java @@ -385,6 +385,18 @@ public final class ConnectionPoolTest { assertEquals(0, pool.getSpdyConnectionCount()); } + @Test public void evictAllConnections() { + ConnectionPool pool = new ConnectionPool(10, KEEP_ALIVE_DURATION_MS); + pool.recycle(httpA); + Util.closeQuietly(httpA); // Include a closed connection in the pool. + pool.recycle(httpB); + pool.maybeShare(spdyA); + assertEquals(3, pool.getConnectionCount()); + + pool.evictAll(); + assertEquals(0, pool.getConnectionCount()); + } + private void assertPooled(ConnectionPool pool, Connection... connections) throws Exception { assertEquals(Arrays.asList(connections), pool.getConnections()); }