From bcb29c0a6445c7e53bb9f94b216533cd419eca3e Mon Sep 17 00:00:00 2001 From: Maria Petridean Date: Fri, 8 Jul 2016 00:17:53 +0300 Subject: [PATCH] DIRMINA-1039 - continue process the write requests after handling an empty message marker --- .../core/polling/AbstractPollingIoProcessor.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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 310a7ae3d..f59186069 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 @@ -831,7 +831,11 @@ private boolean flushNow(S session, long currentTime) { int localWrittenBytes = 0; Object message = req.getMessage(); + // boolean to indicate if the current message is an empty buffer, representing a message marker + boolean isEmptyMessage = false; + if (message instanceof IoBuffer) { + isEmptyMessage = !((IoBuffer) message).hasRemaining(); localWrittenBytes = writeBuffer(session, req, hasFragmentation, maxWrittenBytes - writtenBytes, currentTime); @@ -860,12 +864,18 @@ private boolean flushNow(S session, long currentTime) { + message.getClass().getName() + "'. Are you missing a protocol encoder?"); } - if (localWrittenBytes == 0) { + if (localWrittenBytes == 0 && !isEmptyMessage) { // Kernel buffer is full. setInterestedInWrite(session, true); return false; } + if (localWrittenBytes == 0 && isEmptyMessage) { + // Just processed a message marker - empty buffer; + // set the session write flag and continue + setInterestedInWrite(session, true); + } + writtenBytes += localWrittenBytes; if (writtenBytes >= maxWrittenBytes) {