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

Emmanuel Lecharny closed DIRMINA-347.
-------------------------------------


> Server: StreamIoHandler does not close InputStream and OutputStream on 
> sessionClosed()
> --------------------------------------------------------------------------------------
>
>                 Key: DIRMINA-347
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-347
>             Project: MINA
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 1.0.1
>         Environment: Ubuntu 6.06
>            Reporter: Eric Fitchett
>            Assignee: Trustin Lee
>            Priority: Minor
>             Fix For: 1.0.2
>
>         Attachments: StreamIoHandler_CloseStreams.diff
>
>
> When reading from the InputStream provided by StreamIoHandler, the read can 
> block indefinitely if the client closes the connection.
> This is caused by the StreamIoHandler not closing the provided streams in the 
> sessionClosed() method.  The InputStream remains open, waiting for more data. 
>  After many connections, there may be a large number of "zombie" threads that 
> will never wake up.
> I will upload a patch to fix this problem.  In the mean time, a workaround I 
> am currently using follows.  It keeps track of the InputStream for each 
> session, and closes it when the session closes.  This ensures the thread has 
> a chance to terminate properly.
>     protected final void processStreamIo(
>             IoSession session,
>             InputStream in,
>             OutputStream out) {
>         sessionStreams.put(session, in);
>         // Process the streams in a separate thread
>         new Worker(in, out).start();
>     }
>     // Ensures session's InputStream gets closed, so the thread doesn't lock 
> up
>     private Map<IoSession,InputStream> sessionStreams = new 
> HashMap<IoSession, InputStream>();
>     @Override
>     public void sessionClosed(IoSession session) throws Exception {
>         super.sessionClosed(session);
>         InputStream is = sessionStreams.get(session);
>         if(null != is) {
>             try {
>                 is.close();
>             } catch(IOException ioe) {
>                 // Ignore
>             }
>         }
>     }

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

Reply via email to