Repository: mina
Updated Branches:
  refs/heads/2.0 12d45d143 -> 109381c94


o Created a Static MESSAGE_SENT_REQUEST which is used to mark the end of
messages in the codec filter. It avoids the creation of a WriteRequest
for every message being sent.
o Use this MESSAGE_SENT_REQUEST in the ProtocolCodecFilter, when we have
encoded a full message
o Changed the way we process the write loop by checking for the presence
if this MESSAGE_SENT_REQUEST instead of using the number of written
bytes.

Project: http://git-wip-us.apache.org/repos/asf/mina/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina/commit/a4a481d2
Tree: http://git-wip-us.apache.org/repos/asf/mina/tree/a4a481d2
Diff: http://git-wip-us.apache.org/repos/asf/mina/diff/a4a481d2

Branch: refs/heads/2.0
Commit: a4a481d25963e925a7b94123a83416e3321ecb90
Parents: 12d45d1
Author: Emmanuel Lécharny <[email protected]>
Authored: Fri Aug 19 17:13:59 2016 +0200
Committer: Emmanuel Lécharny <[email protected]>
Committed: Fri Aug 19 17:13:59 2016 +0200

----------------------------------------------------------------------
 .../mina/core/polling/AbstractPollingIoProcessor.java  | 13 +++----------
 .../apache/mina/core/session/AbstractIoSession.java    |  7 +++++++
 .../apache/mina/filter/codec/ProtocolCodecFilter.java  |  5 ++---
 3 files changed, 12 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina/blob/a4a481d2/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
----------------------------------------------------------------------
diff --git 
a/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
 
b/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
index 5d23b35..c1295f6 100644
--- 
a/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
+++ 
b/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
@@ -814,9 +814,6 @@ public abstract class AbstractPollingIoProcessor<S extends 
AbstractIoSession> im
                 + (session.getConfig().getMaxReadBufferSize() >>> 1);
         int writtenBytes = 0;
         WriteRequest req = null;
-        
-        // boolean to indicate if the current message is an empty buffer, 
representing a message marker
-        boolean isEmptyMessage = false;
 
         try {
             // Clear OP_WRITE
@@ -840,7 +837,6 @@ public abstract class AbstractPollingIoProcessor<S extends 
AbstractIoSession> im
                 Object message = req.getMessage();
 
                 if (message instanceof IoBuffer) {
-                    isEmptyMessage = !((IoBuffer) message).hasRemaining();
                     localWrittenBytes = writeBuffer(session, req, 
hasFragmentation, maxWrittenBytes - writtenBytes,
                             currentTime);
 
@@ -870,14 +866,11 @@ public abstract class AbstractPollingIoProcessor<S 
extends AbstractIoSession> im
                 }
 
                 if (localWrittenBytes == 0) {
-                    if (isEmptyMessage) {
-                        // Kernel buffer is full.
+
+                    // Kernel buffer is full.
+                    if (!req.equals(AbstractIoSession.MESSAGE_SENT_REQUEST)) {
                         setInterestedInWrite(session, true);
                         return false;
-                    } else {
-                        // Just processed a message marker - empty buffer;
-                        // set the session write flag and continue
-                        setInterestedInWrite(session, true);
                     }
                 } else {
                     writtenBytes += localWrittenBytes;

http://git-wip-us.apache.org/repos/asf/mina/blob/a4a481d2/mina-core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
----------------------------------------------------------------------
diff --git 
a/mina-core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java 
b/mina-core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
index 316d978..842859f 100644
--- 
a/mina-core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
+++ 
b/mina-core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
@@ -97,6 +97,13 @@ public abstract class AbstractIoSession implements IoSession 
{
      */
     public static final WriteRequest CLOSE_REQUEST = new 
DefaultWriteRequest(new Object());
 
+    /**
+     * An internal write request object that triggers message sent events.
+     * 
+     * @see #writeRequestQueue
+     */
+    public static final WriteRequest MESSAGE_SENT_REQUEST = new 
DefaultWriteRequest(DefaultWriteRequest.EMPTY_MESSAGE);
+
     private final Object lock = new Object();
 
     private IoSessionAttributeMap attributes;

http://git-wip-us.apache.org/repos/asf/mina/blob/a4a481d2/mina-core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
----------------------------------------------------------------------
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 18b2ec4..1f47928 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
@@ -29,6 +29,7 @@ import org.apache.mina.core.filterchain.IoFilterAdapter;
 import org.apache.mina.core.filterchain.IoFilterChain;
 import org.apache.mina.core.future.DefaultWriteFuture;
 import org.apache.mina.core.future.WriteFuture;
+import org.apache.mina.core.session.AbstractIoSession;
 import org.apache.mina.core.session.AttributeKey;
 import org.apache.mina.core.session.IoSession;
 import org.apache.mina.core.write.DefaultWriteRequest;
@@ -435,9 +436,7 @@ public class ProtocolCodecFilter extends IoFilterAdapter {
 
             if (future == null) {
                 // Creates an empty writeRequest containing the destination
-                WriteRequest writeRequest = new DefaultWriteRequest(
-                        DefaultWriteRequest.EMPTY_MESSAGE, null, destination);
-                future = DefaultWriteFuture.newNotWrittenFuture(session, new 
NothingWrittenException(writeRequest));
+                future = DefaultWriteFuture.newNotWrittenFuture(session, new 
NothingWrittenException(AbstractIoSession.MESSAGE_SENT_REQUEST));
             }
 
             return future;

Reply via email to