Fixes reuse of filter argument WriteRequest when more than one Object is
produced by the ProtocolEncoder
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 @@
}
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 @@
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;