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;
 

Reply via email to