Index: httpcore-nio/src/main/java/org/apache/http/nio/pool/RouteSpecificPool.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- httpcore-nio/src/main/java/org/apache/http/nio/pool/RouteSpecificPool.java (revision 1) +++ httpcore-nio/src/main/java/org/apache/http/nio/pool/RouteSpecificPool.java (revision ) @@ -147,12 +147,15 @@ return future; } - public E completed(final SessionRequest request, final C conn) { - BasicFuture future = removeRequest(request); + public E createEntry(final SessionRequest request, final C conn) { E entry = createEntry(this.route, conn); this.leased.add(entry); - future.completed(entry); return entry; + } + + public void completed(SessionRequest request, E entry) { + BasicFuture future = removeRequest(request); + future.completed(entry); } public void cancelled(final SessionRequest request) { Index: httpcore-nio/src/test/java/org/apache/http/nio/pool/TestRouteSpecificPool.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- httpcore-nio/src/test/java/org/apache/http/nio/pool/TestRouteSpecificPool.java (revision 1) +++ httpcore-nio/src/test/java/org/apache/http/nio/pool/TestRouteSpecificPool.java (revision ) @@ -95,9 +95,12 @@ Assert.assertEquals(0, pool.getAvailableCount()); Assert.assertEquals(0, pool.getLeasedCount()); Assert.assertEquals(1, pool.getPendingCount()); - LocalPoolEntry entry = pool.completed(sessionRequest, session); + LocalPoolEntry entry = pool.createEntry(sessionRequest, session); Assert.assertNotNull(entry); Assert.assertSame(session, entry.getConnection()); + Assert.assertFalse(future.isDone()); + Assert.assertFalse(future.isCancelled()); + pool.completed(sessionRequest, entry); Assert.assertTrue(future.isDone()); Assert.assertFalse(future.isCancelled()); @@ -201,11 +204,14 @@ Assert.assertEquals(0, pool.getLeasedCount()); Assert.assertEquals(3, pool.getPendingCount()); - LocalPoolEntry entry1 = pool.completed(sessionRequest1, session1); + LocalPoolEntry entry1 = pool.createEntry(sessionRequest1, session1); + pool.completed(sessionRequest1, entry1); Assert.assertNotNull(entry1); - LocalPoolEntry entry2 = pool.completed(sessionRequest2, session2); + LocalPoolEntry entry2 = pool.createEntry(sessionRequest2, session2); + pool.completed(sessionRequest2, entry2); Assert.assertNotNull(entry2); - LocalPoolEntry entry3 = pool.completed(sessionRequest3, session3); + LocalPoolEntry entry3 = pool.createEntry(sessionRequest3, session3); + pool.completed(sessionRequest3, entry3); Assert.assertNotNull(entry3); Assert.assertEquals(3, pool.getAllocatedCount()); @@ -258,11 +264,14 @@ Assert.assertEquals(0, pool.getLeasedCount()); Assert.assertEquals(3, pool.getPendingCount()); - LocalPoolEntry entry1 = pool.completed(sessionRequest1, session1); + LocalPoolEntry entry1 = pool.createEntry(sessionRequest1, session1); + pool.completed(sessionRequest1, entry1); Assert.assertNotNull(entry1); - LocalPoolEntry entry2 = pool.completed(sessionRequest2, session2); + LocalPoolEntry entry2 = pool.createEntry(sessionRequest2, session2); + pool.completed(sessionRequest2, entry2); Assert.assertNotNull(entry2); - LocalPoolEntry entry3 = pool.completed(sessionRequest3, session3); + LocalPoolEntry entry3 = pool.createEntry(sessionRequest3, session3); + pool.completed(sessionRequest3, entry3); Assert.assertNotNull(entry3); Assert.assertEquals(3, pool.getAllocatedCount()); @@ -301,11 +310,14 @@ BasicFuture future3 = new BasicFuture(null); pool.addPending(sessionRequest3, future3); - LocalPoolEntry entry1 = pool.completed(sessionRequest1, session1); + LocalPoolEntry entry1 = pool.createEntry(sessionRequest1, session1); + pool.completed(sessionRequest1, entry1); Assert.assertNotNull(entry1); - LocalPoolEntry entry2 = pool.completed(sessionRequest2, session2); + LocalPoolEntry entry2 = pool.createEntry(sessionRequest2, session2); + pool.completed(sessionRequest2, entry2); Assert.assertNotNull(entry2); - LocalPoolEntry entry3 = pool.completed(sessionRequest3, session3); + LocalPoolEntry entry3 = pool.createEntry(sessionRequest3, session3); + pool.completed(sessionRequest3, entry3); Assert.assertNotNull(entry3); entry2.setState(Boolean.FALSE); @@ -365,11 +377,14 @@ Assert.assertEquals(0, pool.getLeasedCount()); Assert.assertEquals(3, pool.getPendingCount()); - LocalPoolEntry entry1 = pool.completed(sessionRequest1, session1); + LocalPoolEntry entry1 = pool.createEntry(sessionRequest1, session1); + pool.completed(sessionRequest1, entry1); Assert.assertNotNull(entry1); - LocalPoolEntry entry2 = pool.completed(sessionRequest2, session2); + LocalPoolEntry entry2 = pool.createEntry(sessionRequest2, session2); + pool.completed(sessionRequest2, entry2); Assert.assertNotNull(entry2); - LocalPoolEntry entry3 = pool.completed(sessionRequest3, session3); + LocalPoolEntry entry3 = pool.createEntry(sessionRequest3, session3); + pool.completed(sessionRequest3, entry3); Assert.assertNotNull(entry3); Assert.assertEquals(3, pool.getAllocatedCount()); @@ -433,9 +448,11 @@ BasicFuture future3 = new BasicFuture(null); pool.addPending(sessionRequest3, future3); - LocalPoolEntry entry1 = pool.completed(sessionRequest1, session1); + LocalPoolEntry entry1 = pool.createEntry(sessionRequest1, session1); + pool.completed(sessionRequest1, entry1); Assert.assertNotNull(entry1); - LocalPoolEntry entry2 = pool.completed(sessionRequest2, session2); + LocalPoolEntry entry2 = pool.createEntry(sessionRequest2, session2); + pool.completed(sessionRequest2, entry2); Assert.assertNotNull(entry2); pool.free(entry1, true); Index: httpcore-nio/src/main/java/org/apache/http/nio/pool/AbstractNIOConnPool.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- httpcore-nio/src/main/java/org/apache/http/nio/pool/AbstractNIOConnPool.java (revision 1) +++ httpcore-nio/src/main/java/org/apache/http/nio/pool/AbstractNIOConnPool.java (revision ) @@ -346,8 +346,10 @@ IOSession session = request.getSession(); try { C conn = this.connFactory.create(route, session); - E entry = pool.completed(request, conn); + E entry = pool.createEntry(request, conn); this.leased.add(entry); + pool.completed(request, entry); + } catch (IOException ex) { pool.failed(request, ex); }