diff --git a/src/org/redkale/net/PrepareRunner.java b/src/org/redkale/net/PrepareRunner.java index 807fe8386..e126129a7 100644 --- a/src/org/redkale/net/PrepareRunner.java +++ b/src/org/redkale/net/PrepareRunner.java @@ -62,8 +62,9 @@ public final class PrepareRunner implements Runnable { public void completed(Integer count, Void attachment1) { if (count < 1) { response.request.offerReadBuffer(buffer); - response.finish(true); channel.dispose();// response.init(channel); 在调用之前异常 + response.removeChannel(); + response.finish(true); return; } // { //测试 @@ -85,8 +86,9 @@ public final class PrepareRunner implements Runnable { @Override public void failed(Throwable exc, Void attachment2) { response.request.offerReadBuffer(buffer); + channel.dispose();// response.init(channel); 在调用之前异常 + response.removeChannel(); response.finish(true); - channel.dispose(); // response.init(channel); 可能在调用之前异常 if (exc != null && context.logger.isLoggable(Level.FINEST)) { context.logger.log(Level.FINEST, "Servlet Handler read channel erroneous, forece to close channel ", exc); } @@ -94,8 +96,9 @@ public final class PrepareRunner implements Runnable { }); } catch (Exception te) { response.request.offerReadBuffer(buffer); + channel.dispose();// response.init(channel); 在调用之前异常 + response.removeChannel(); response.finish(true); - channel.dispose(); // response.init(channel); 可能在调用之前异常 if (te != null && context.logger.isLoggable(Level.FINEST)) { context.logger.log(Level.FINEST, "Servlet read channel erroneous, forece to close channel ", te); } diff --git a/src/org/redkale/net/Transport.java b/src/org/redkale/net/Transport.java index 002e4afd0..30152d5ea 100644 --- a/src/org/redkale/net/Transport.java +++ b/src/org/redkale/net/Transport.java @@ -251,7 +251,11 @@ public final class Transport { if (!queue.isEmpty()) { AsyncConnection conn; while ((conn = queue.poll()) != null) { - if (conn.isOpen()) return CompletableFuture.completedFuture(conn); + if (conn.isOpen()) { + return CompletableFuture.completedFuture(conn); + } else { + conn.dispose(); + } } } CompletableFuture future = new CompletableFuture(); @@ -342,6 +346,8 @@ public final class Transport { if (conn.isOpen()) { TransportNode node = findTransportNode(conn.getRemoteAddress()); if (node == null || !node.conns.offer(conn)) conn.dispose(); + } else { + conn.dispose(); } } else { conn.dispose();