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;
