[
https://issues.apache.org/jira/browse/DIRMINA-772?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13410056#comment-13410056
]
Emmanuel Lecharny commented on DIRMINA-772:
-------------------------------------------
You are right, this is potentially problematic. The issue is that when the
write fails during the call to he flush() method, we generate a
NothingWrittenException which takes a WriteRequest as a parameter. I do think
this is a bad choice. The solution would be to only store the destination into
the Protocolcodec Filter, and to recreate an empty WriteRequest with the
destination when we have to throw the exception.
> First sent message is not garbage collected per session
> -------------------------------------------------------
>
> Key: DIRMINA-772
> URL: https://issues.apache.org/jira/browse/DIRMINA-772
> Project: MINA
> Issue Type: Bug
> Affects Versions: 2.0.0-RC1
> Environment: WinXP JDK 1.6.1_18
> Reporter: Jörg Michelberger
> Labels: memory_leak, security
>
> Hi there,
> I did a heap dump of my application containing MINA 2.0.0RC1 and found a lot
> of my messages not garbage collected.
> I use ProtocolCodecFilter.
> After a investigation with VisualVM I found my already sent messages stucking
> in a DefaultWriteRequest as attribute message.
> The DefaultWriteRequest is attribute writeRequest in
> ProtocolCodecFilter$ProtocolEncoderOutputImpl.
> ProtocolCodecFilter$ProtocolEncoderOutputImpl stucks with key ENCODER_OUT in
> the sessions attribute map.
> WriteRequest in ProtocolCodecFilter$ProtocolEncoderOutputImpl is not released
> after flushing...
> The attribute ENCODER_OUT is never removed from attributes.
> Seems that only first Message stucks ProtocolEncoderOutputImpl as result of
> constructor call of ProtocolCodecFilter line 543. ProtocolEncoderOutputImpl
> is stored for later usage in ProtocolCodecFilter line 298, but only for
> providing public void write(Object encodedMessage) API.
> Hmm, ProtocolEncoderOutputImpl should store not the whole WriteRequest, only
> significant data.
> ProtocolCodecFilter.java
> private ProtocolEncoderOutput getEncoderOut(IoSession session,
> NextFilter nextFilter, WriteRequest writeRequest) {
> ProtocolEncoderOutput out = (ProtocolEncoderOutput)
> session.getAttribute(ENCODER_OUT);
>
> if (out == null) {
> // Create a new instance, and stores it into the session
> out = new ProtocolEncoderOutputImpl(session, nextFilter,
> writeRequest);
> session.setAttribute(ENCODER_OUT, out);
> }
>
> return out;
> }
> Regards
> Jörg Michelberger
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira