From cf2ab617c282da5fe69069c74c8de113fe4fef8b Mon Sep 17 00:00:00 2001 From: Redkale <8730487+redkale@users.noreply.github.com> Date: Fri, 18 Jan 2019 15:50:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DAioAsyncConnection=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E6=97=B6write=E9=98=9F=E5=88=97=E8=BF=98=E6=9C=89?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=B2=A1=E5=86=99=E5=AE=8C=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redkale/net/TcpAioAsyncConnection.java | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/org/redkale/net/TcpAioAsyncConnection.java b/src/org/redkale/net/TcpAioAsyncConnection.java index 1b29c75ec..da1c13ef7 100644 --- a/src/org/redkale/net/TcpAioAsyncConnection.java +++ b/src/org/redkale/net/TcpAioAsyncConnection.java @@ -110,18 +110,22 @@ public class TcpAioAsyncConnection extends AsyncConnection { channel.read(dst, timeout < 0 ? 0 : timeout, unit, dst, handler); } - private void nextWrite(A attachment) { + private void nextWrite(Throwable exc, A attachment) { BlockingQueue queue = this.writeQueue; WriteEntry entry = queue == null ? null : queue.poll(); if (entry != null) { - try { - if (entry.writeOneBuffer == null) { - write(false, entry.writeBuffers, entry.writeOffset, entry.writeLength, entry.writeAttachment, entry.writeHandler); - } else { - write(false, entry.writeOneBuffer, entry.writeAttachment, entry.writeHandler); + if (exc == null) { + try { + if (entry.writeOneBuffer == null) { + write(false, entry.writeBuffers, entry.writeOffset, entry.writeLength, entry.writeAttachment, entry.writeHandler); + } else { + write(false, entry.writeOneBuffer, entry.writeAttachment, entry.writeHandler); + } + } catch (Exception e) { + entry.writeHandler.failed(e, entry.writeAttachment); } - } catch (Exception e) { - entry.writeHandler.failed(e, entry.writeAttachment); + } else { //当连接已经关掉了,不需要调用write方法,直接报异常 + entry.writeHandler.failed(exc, entry.writeAttachment); } } else { semaphore.release(); @@ -312,17 +316,17 @@ public class TcpAioAsyncConnection extends AsyncConnection { failed(e, attachment); return; } - nextWrite(attachment); + nextWrite(null, attachment); writeHandler.completed(writeCount, attachment); } else { - nextWrite(attachment); + nextWrite(null, attachment); writeHandler.completed(result.intValue(), attachment); } } @Override public void failed(Throwable exc, A attachment) { - nextWrite(attachment); + nextWrite(isOpen() ? null : exc, attachment); writeHandler.failed(exc, attachment); } @@ -350,13 +354,13 @@ public class TcpAioAsyncConnection extends AsyncConnection { failed(e, attachment); return; } - nextWrite(attachment); + nextWrite(null, attachment); writeHandler.completed(result, attachment); } @Override public void failed(Throwable exc, A attachment) { - nextWrite(attachment); + nextWrite(isOpen() ? null : exc, attachment); writeHandler.failed(exc, attachment); }