You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Emmanuel Lecharny (JIRA)" <ji...@apache.org> on 2012/07/09 18:03:35 UTC

[jira] [Resolved] (DIRMINA-894) java.io.IOException: Broken Pipe infinite loop

     [ https://issues.apache.org/jira/browse/DIRMINA-894?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Emmanuel Lecharny resolved DIRMINA-894.
---------------------------------------

       Resolution: Fixed
    Fix Version/s: 2.0.5

There were no check that the session was closed or closing when we were calling the close( now ) method.

A check has been added : 
http://svn.apache.org/viewvc?rev=1359234&view=rev

Hopefully, i should fix the problem (a check could help !)

Many thanks for the analysis and report !
                
> java.io.IOException: Broken Pipe infinite loop
> ----------------------------------------------
>
>                 Key: DIRMINA-894
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-894
>             Project: MINA
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.0.4
>            Reporter: Yannick Lecaillez
>            Priority: Critical
>             Fix For: 2.0.5
>
>
> An infinite java.io.IOException can occurs in when a session.close(false) is called in a IoFilter.exceptionCaught().
> Indeed:
> AbstractPollingIoProcessor.flush(time) (line 777): 
>   This method flush all sessions contained in flushingSession. It does that until there is no more flushingSession
> AbstractPollingIoProcessor.flushNow(session,time) (line 832):
>   Process write request. 
>   If an exception occurs during the write, IoFilter.exceptionCaught() is called ;
> IoFilter.exceptionCaught() (user code): 
>   call session.close(false);
> AbstractIoSession.close(false): (line 286) call closeOnFlush()
> AbstractIoSession.closeOnFlush() : 
>   add a CLOSE_REQUEST into the WriteQueue and flush() the session.
>   this session is then appended to the flushingSessions. 
>   
> Since the exception handling code in flushNow() doesn't reset the session.getCurrentWriteRequest(), the writeRequestQueue is never polled and the processor will try to process the same write request infinitly.

--
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