From fd1197e8dc724868f3050e74e19071bd867c79dc Mon Sep 17 00:00:00 2001 From: Redkale <8730487+redkale@users.noreply.github.com> Date: Sat, 4 Aug 2018 23:40:52 +0800 Subject: [PATCH] --- src/org/redkale/net/Response.java | 33 ++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/org/redkale/net/Response.java b/src/org/redkale/net/Response.java index a64fde995..f4e98c048 100644 --- a/src/org/redkale/net/Response.java +++ b/src/org/redkale/net/Response.java @@ -251,6 +251,7 @@ public abstract class Response> { } this.recycleListener = null; } + if (request.more) removeChannel(); if (request.keepAlive && !request.more && channel != null) { if (channel.isOpen()) { AsyncConnection conn = removeChannel(); @@ -280,35 +281,43 @@ public abstract class Response> { public void finish(ByteBuffer buffer) { if (!this.inited) return; //避免重复关闭 ByteBuffer data = this.request.removeMoredata(); - this.request.more = data != null && this.request.keepAlive; - this.channel.write(buffer, buffer, finishHandler); - if (this.request.more) new PrepareRunner(this.context, this.channel, data, null).run(); + final AsyncConnection conn = this.channel; + final boolean more = data != null && this.request.keepAlive; + this.request.more = more; + conn.write(buffer, buffer, finishHandler); + if (more) new PrepareRunner(this.context, conn, data, null).run(); } public void finish(boolean kill, ByteBuffer buffer) { if (!this.inited) return; //避免重复关闭 if (kill) refuseAlive(); ByteBuffer data = this.request.removeMoredata(); - this.request.more = data != null && this.request.keepAlive; - this.channel.write(buffer, buffer, finishHandler); - if (this.request.more) new PrepareRunner(this.context, this.channel, data, null).run(); + final AsyncConnection conn = this.channel; + final boolean more = data != null && this.request.keepAlive; + this.request.more = more; + conn.write(buffer, buffer, finishHandler); + if (more) new PrepareRunner(this.context, conn, data, null).run(); } public void finish(ByteBuffer... buffers) { if (!this.inited) return; //避免重复关闭 + final AsyncConnection conn = this.channel; ByteBuffer data = this.request.removeMoredata(); - this.request.more = data != null && this.request.keepAlive; - this.channel.write(buffers, buffers, finishHandler2); - if (this.request.more) new PrepareRunner(this.context, this.channel, data, null).run(); + final boolean more = data != null && this.request.keepAlive; + this.request.more = more; + conn.write(buffers, buffers, finishHandler2); + if (more) new PrepareRunner(this.context, conn, data, null).run(); } public void finish(boolean kill, ByteBuffer... buffers) { if (!this.inited) return; //避免重复关闭 if (kill) refuseAlive(); + final AsyncConnection conn = this.channel; ByteBuffer data = this.request.removeMoredata(); - this.request.more = data != null && this.request.keepAlive; - this.channel.write(buffers, buffers, finishHandler2); - if (this.request.more) new PrepareRunner(this.context, this.channel, data, null).run(); + final boolean more = data != null && this.request.keepAlive; + this.request.more = more; + conn.write(buffers, buffers, finishHandler2); + if (more) new PrepareRunner(this.context, conn, data, null).run(); } protected void send(final ByteBuffer buffer, final A attachment, final CompletionHandler handler) {