[
https://issues.apache.org/jira/browse/DIRMINA-362?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Trustin Lee resolved DIRMINA-362.
---------------------------------
Resolution: Fixed
Fix Version/s: 1.0.3
Assignee: Trustin Lee
Your patch has been applied to all branches (1.0.3-SNAPSHOT, 1.1.0-SNAPSHOT,
2.0.0-M1-SNAPSHOT). Thank you for the detailed explanation and fix! Please
close this issue after the fix is confirmed.
> Channel writes being made without OP_WRITE selector ready
> ---------------------------------------------------------
>
> Key: DIRMINA-362
> URL: https://issues.apache.org/jira/browse/DIRMINA-362
> Project: MINA
> Issue Type: Bug
> Components: Core
> Affects Versions: 1.0.0, 1.0.1, 1.0.2
> Environment: Windows 2000, JDK 1.4+, JBoss 4.0.4GA
> Reporter: Michael Kearns
> Assigned To: Trustin Lee
> Fix For: 1.0.3
>
>
> We've been experiencing 100%CPU Kernel locks when utilising the Mitosis
> directory replication within Apache Directory. The error manifests itself
> within the SocketIoProcessor class, with an instantly returning selector, yet
> no selected keys. It would only happen when Directory replication (within our
> JBoss environment) was enabled, against a non-existant client, and suggests a
> concurrency issue.
> Although there are several JVM bugs registered in this area, none seemed to
> be the problem at hand, although troubleshooting was somewhat difficult in
> that the problem is not reproducible 'at will'.
> After much testing, I found (amongst other issues) that the
> doFlush(SocketSessionImpl session) method would attempt to write data without
> checking the appropriate selector flags. This would initially result in a
> NotYetConnected exception, and then subsequent spinning of the selector.
> I can't say with 100% certainty that adding a check in this location fixes
> the problem, but after 72 hours of uptime in my last test, I have yet to
> experience the problem, whereas it would usually occur within the first few
> hours of running.
> The snippet below demonstrates the change, with the 'if' test on the key
> writability being th only change, wrapped around the existing write section.
> if (key.isWritable())
> {
> int writtenBytes = ch.write( buf.buf() );
> if( writtenBytes > 0 )
> {
> session.increaseWrittenBytes( writtenBytes );
> }
> }
> So far as I can tell, this code hasn't changed from 1.0.0 upwards, and so the
> patch would need to be apllied to the 1.0.3 and 2.0.x streams.
> I hope this is of help, and the fix can be applied to 1.0.3 as it's quite a
> critical problem from our usage.
> Regards,
> Michael.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.