Emmanuel Lecharny created DIRMINA-1025:
------------------------------------------
Summary: A call to session.closed(true) will still flush messages.
Key: DIRMINA-1025
URL: https://issues.apache.org/jira/browse/DIRMINA-1025
Project: MINA
Issue Type: Bug
Components: Core
Affects Versions: 2.0.11
Reporter: Emmanuel Lecharny
If we call for a {{session.close(true)}}, we expect the session not to write
any messages into the socket.
This is not what happen. The {{close(true)}} call just adds the session into
the {{IoProcessor.removedSession}} queue, and continue to proceed with
{{flush}} before processing the session removal.
Typically, if the session is being closed in a {{IoHandler.messageReceived()}},
then it comes form the {{process()}} method call, which is :
{noformat}
private void process(S session) {
// Process Reads
if (isReadable(session) && !session.isReadSuspended()) {
read(session);
}
// Process writes
if (isWritable(session) && !session.isWriteSuspended()) {
// add the session to the queue, if it's not already there
if (session.setScheduledForFlush(true)) {
flushingSessions.add(session);
}
}
}
{noformat}
At this point, after the {{read}}, the {{write}} may be executed (typically if
some big message was written but not sent completely, so that the OP_WRITE flag
was set to TRUE).
We should most certainly check if the session is being closed before trying to
write something.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)