You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Thomas Dudek (JIRA)" <ji...@apache.org> on 2013/03/27 12:45:15 UTC
[jira] [Created] (HTTPCORE-336) Unhandled CancelledKeyException
leads to a shutdown of the underlying IOReactor
Thomas Dudek created HTTPCORE-336:
-------------------------------------
Summary: Unhandled CancelledKeyException leads to a shutdown of the underlying IOReactor
Key: HTTPCORE-336
URL: https://issues.apache.org/jira/browse/HTTPCORE-336
Project: HttpComponents HttpCore
Issue Type: Bug
Components: HttpCore NIO
Affects Versions: 4.2.3
Environment: HttpAsyncClient 4.0-beta3
Reporter: Thomas Dudek
An unhandled {{java.nio.channels.CancelledKeyException}} in {{AbstractIOReactor#processNewChannels()}} leads to a shutdown of the underlying {{IOReactor}}.
Here's the stacktrace:
{noformat}
org.apache.http.nio.reactor.IOReactorException: I/O dispatch worker terminated abnormally
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor.execute(AbstractMultiworkerIOReactor.java:382)
at org.apache.http.impl.nio.conn.PoolingClientAsyncConnectionManager.execute(PoolingClientAsyncConnectionManager.java:108)
at org.apache.http.impl.nio.client.AbstractHttpAsyncClient.doExecute(AbstractHttpAsyncClient.java:464)
at org.apache.http.impl.nio.client.AbstractHttpAsyncClient.access$000(AbstractHttpAsyncClient.java:101)
at org.apache.http.impl.nio.client.AbstractHttpAsyncClient$1.run(AbstractHttpAsyncClient.java:485)
Caused by: java.nio.channels.CancelledKeyException
at sun.nio.ch.SelectionKeyImpl.ensureValid(SelectionKeyImpl.java:73)
at sun.nio.ch.SelectionKeyImpl.interestOps(SelectionKeyImpl.java:77)
at org.apache.http.impl.nio.reactor.IOSessionImpl.<init>(IOSessionImpl.java:94)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processNewChannels(AbstractIOReactor.java:406)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:291)
at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:106)
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:604)
at java.lang.Thread.run(Thread.java:722)
{noformat}
This happens regularly under non-reproducible circumstances.
The particular line of code where the exception is not handled is {{AbstractIOReactor.java:406}}. The exception is thrown in the constructor of {{IOSessionImpl.java:94}} in order of a canceled {{SelectionKey}}.
As a result of this unhandled exception, the {{AbstractMultiworkerIOReactor}} throws a {{IOReactorException}} in {{AbstractMultiworkerIOReactor.java:382}} and is finally being shutdown.
Since this component is used by {{HttpAsyncClient}}, after this exception the instance of {{HttpAsyncClient}} is no longer usable.
The following patch works for us ({{AbstractIOReactor.java:406}}):
{noformat}
IOSession session = null;
try {
session = new IOSessionImpl(key, interestOpsCallback, sessionClosedCallback);
} catch (CancelledKeyException ex) {
key.attach(null);
return;
}
{noformat}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org