This is an automated email from the ASF dual-hosted git repository. johnnyv pushed a commit to branch bugfix/DIRMINA-1126 in repository https://gitbox.apache.org/repos/asf/mina.git
commit 129bdfb13bf884b1d283a4427fb3784772800d64 Author: johnnyv <john...@apache.org> AuthorDate: Thu May 7 09:33:32 2020 -0400 Fixes reuse of filter argument WriteRequest when more than one Object is produced by the ProtocolEncoder --- .../apache/mina/core/write/DefaultWriteRequest.java | 2 +- .../apache/mina/filter/codec/ProtocolCodecFilter.java | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/mina-core/src/main/java/org/apache/mina/core/write/DefaultWriteRequest.java b/mina-core/src/main/java/org/apache/mina/core/write/DefaultWriteRequest.java index 8324c6a..49fe961 100644 --- a/mina-core/src/main/java/org/apache/mina/core/write/DefaultWriteRequest.java +++ b/mina-core/src/main/java/org/apache/mina/core/write/DefaultWriteRequest.java @@ -221,7 +221,7 @@ public class DefaultWriteRequest implements WriteRequest { } this.message = message; - originalMessage = message; + this.originalMessage = message; if (message instanceof IoBuffer) { // duplicate it, so that any modification made on it diff --git a/mina-core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java b/mina-core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java index 628e4f2..a460b3d 100644 --- a/mina-core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java +++ b/mina-core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java @@ -333,13 +333,18 @@ public class ProtocolCodecFilter extends IoFilterAdapter { break; } - // Flush only when the buffer has remaining. - if (!(encodedMessage instanceof IoBuffer) || ((IoBuffer) encodedMessage).hasRemaining()) { - writeRequest.setMessage(encodedMessage); - - nextFilter.filterWrite(session, writeRequest); - } - } + // Flush only when the buffer has remaining. + if (!(encodedMessage instanceof IoBuffer) || ((IoBuffer) encodedMessage).hasRemaining()) { + if (bufferQueue.isEmpty()) { + writeRequest.setMessage(encodedMessage); + nextFilter.filterWrite(session, writeRequest); + } else { + SocketAddress destination = writeRequest.getDestination(); + WriteRequest encodedWriteRequest = new EncodedWriteRequest(encodedMessage, null, destination); + nextFilter.filterWrite(session, encodedWriteRequest); + } + } + } } catch (Exception e) { ProtocolEncoderException pee;