You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Mauritz Lovgren (JIRA)" <ji...@apache.org> on 2009/03/13 22:34:50 UTC

[jira] Commented: (DIRMINA-653) IoSession.write not thread-safe? Loosing messages under heavy multi-threaded write on same session.

    [ https://issues.apache.org/jira/browse/DIRMINA-653?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12681902#action_12681902 ] 

Mauritz Lovgren commented on DIRMINA-653:
-----------------------------------------

As a consequence of this I have been forced to perform encoding of large messages (in parallell) _before_ writing them to the IoSession (I use compression on ObjectOutputStream'ed objects that, should it be performed inside a synchronized (session) would block the session for writing from other threads the entire encoding time (which could be a couple of hundred millis on larger messages!)

In other words, I send pre-prepared ByteBuffers from pre-encoded messages to session.write instead of letting the Encoder do the encoding during the session.write.

Sad, but true :-)

> IoSession.write not thread-safe? Loosing messages under heavy multi-threaded write on same session.
> ---------------------------------------------------------------------------------------------------
>
>                 Key: DIRMINA-653
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-653
>             Project: MINA
>          Issue Type: Bug
>          Components: Core, Filter
>    Affects Versions: 2.0.0-M4
>         Environment: Windows Vista 64-bit
>            Reporter: Mauritz Lovgren
>             Fix For: 2.0.0-RC1
>
>
> I am writing a stress-test that tests multi-thread safetyness of our stateless encoder / decoder under heavy load and I am observing that messages are silently lost during session.write(Object), (the lost messages do not seem to reach the underlying socket buffer at all).
> I am using one encoder / decoder that is stateless. No executor filter, only the filter codec and a basic io handler.
> Synchronizing on the session.write makes the problem go away;
> synchronized (session)
> {
>   future = session.write(message);
> }
> Do I really have to synchronize on the session to solve this issue?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.