From ace40426494f6608001ceb10d59e28b2e0a0b5e9 Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Wed, 18 Apr 2018 18:30:03 +0800 Subject: [PATCH] --- src/org/redkale/net/PrepareRunner.java | 9 +++++++++ src/org/redkale/net/Request.java | 2 +- src/org/redkale/net/Response.java | 4 +--- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/org/redkale/net/PrepareRunner.java b/src/org/redkale/net/PrepareRunner.java index ffe2b11f2..db615992f 100644 --- a/src/org/redkale/net/PrepareRunner.java +++ b/src/org/redkale/net/PrepareRunner.java @@ -64,6 +64,7 @@ public final class PrepareRunner implements Runnable { try { response.request.offerReadBuffer(buffer); response.finish(true); + channel.close();// response.init(channel); 在调用之前异常 } catch (Exception e) { if (context.logger.isLoggable(Level.FINEST)) { context.logger.log(Level.FINEST, "PrepareRunner close channel erroneous on no read bytes", e); @@ -91,6 +92,10 @@ public final class PrepareRunner implements Runnable { public void failed(Throwable exc, Void attachment2) { response.request.offerReadBuffer(buffer); response.finish(true); + try { // response.init(channel); 可能在调用之前异常 + channel.close(); + } catch (Exception e) { + } if (exc != null && context.logger.isLoggable(Level.FINEST)) { context.logger.log(Level.FINEST, "Servlet Handler read channel erroneous, forece to close channel ", exc); } @@ -99,6 +104,10 @@ public final class PrepareRunner implements Runnable { } catch (Exception te) { response.request.offerReadBuffer(buffer); response.finish(true); + try { // response.init(channel); 可能在调用之前异常 + channel.close(); + } catch (Exception e) { + } 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/Request.java b/src/org/redkale/net/Request.java index 019b538b1..5ede7d4a1 100644 --- a/src/org/redkale/net/Request.java +++ b/src/org/redkale/net/Request.java @@ -91,7 +91,7 @@ public abstract class Request { createtime = 0; keepAlive = false; attributes.clear(); - channel = null; // close it by response + channel = null; // close it by response } protected T setProperty(String name, T value) { diff --git a/src/org/redkale/net/Response.java b/src/org/redkale/net/Response.java index 90bcee004..059ac8ba5 100644 --- a/src/org/redkale/net/Response.java +++ b/src/org/redkale/net/Response.java @@ -184,9 +184,7 @@ public abstract class Response> { request.recycle(); if (channel != null) { if (keepAlive) { - this.inited = false; - new PrepareRunner(context, removeChannel(), null, this).run(); - return false; + this.context.runAsync(new PrepareRunner(context, channel, null, null)); } else { try { if (channel.isOpen()) channel.close();