Doug Kelly created SSHD-595:
-------------------------------
Summary: SSHD does not remove sessions if exceptions occur while
closing
Key: SSHD-595
URL: https://issues.apache.org/jira/browse/SSHD-595
Project: MINA SSHD
Issue Type: Bug
Affects Versions: 0.14.0
Environment: mina-ssh 0.14.0
mina-core 2.0.8
Multiple OSes / Java configurations:
* Mac OS X El Capitan on Java 8 (1.8.0_60)
* CentOS 6.4 on Java 8 (1.8.0_60)
* CentOS 6.5 on Java 8 (1.8.0_20-b26).
Reporter: Doug Kelly
MINA SSHD isn't removing sessions when using the MINA/NIO backend if an
exception as received as the session is closing (such as a connection reset is
received with data still in the write buffer). When this case happens, it
seems that {{NioProcessor.getState}} returns the state as {{CLOSING}} (I'm
assuming since the underlying channel is now closed), which means that the
{{AbstractPollingIoProcessor.removeSessions()}} won't ever prune the session,
since a {{CLOSING}} state is simply ignored. The result is a resource leak
over time, since these sessions are never pruned (it's a slow leak, since
entering this condition is racy -- on my workstation, I can produce it through
randomly interrupting connections anywhere from 1/6 to 1/10th of the time).
(This may either be major or critical; reprioritize as necessary.)
I specifically see this error with Gerrit 2.10.4 and Gerrit 2.11.5 (using
mina-sshd 0.14.0 / mina-core 2.0.8), and it looks like the code path is
unchanged in mina-sshd 1.0.0 / mina-core 2.0.9. I was unsure if this is
specifically a bug in mina-core or, if it's something unique to mina-sshd. My
local development system runs Mac OS X El Capitan on Java 8 (1.8.0_60), but
I've also seen this on Linux (CentOS 6.4, again Java 1.8.0_60 and CentOS 6.5 on
Java 1.8.0_20-b26).
The fix may be as simple as attempting to remove the session if {{OPENED}} or
{{CLOSING}}, but I'm unsure what side-effects this may have with other
backends. I'll be happy to test it locally, but I'm fairly ignorant when it
comes to MINA's code.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)