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

Dmitry Potapov updated HTTPCORE-376:
------------------------------------

    Attachment: patch

Please, consider attached file, as a fix for this problem.

> AbstractNIOConnPool.requestCancelled() should not call 
> processNextPendingRequest() when ioreactor is shutting down
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: HTTPCORE-376
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-376
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>          Components: HttpCore NIO
>    Affects Versions: 4.3.2
>            Reporter: Dmitry Potapov
>            Priority: Minor
>         Attachments: patch
>
>
> Currently AbstractMultiworkerIOReactor.doShutdown() sets its status to 
> SHUTTING_DOWN causes all pending request to be cancelled. This causes 
> AbstractNIOConnPool.requestCancelled() to be called, which in turn processed 
> next pending request causing DefaultConnectingIOReactor.connect() to be 
> called. At this point assertion fails and we get the following stack trace:
> Mar 21, 2014 3:04:49 PM 
> org.apache.http.impl.nio.client.InternalHttpAsyncClient doExecute
> SEVERE: I/O reactor terminated abnormally
> java.lang.IllegalStateException: I/O reactor has been shut down
>         at org.apache.http.util.Asserts.check(Asserts.java:34)
>         at 
> org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor.connect(DefaultConnectingIOReactor.java:226)
>         at 
> org.apache.http.nio.pool.AbstractNIOConnPool.processPendingRequest(AbstractNIOConnPool.java:425)
>         at 
> org.apache.http.nio.pool.AbstractNIOConnPool.processNextPendingRequest(AbstractNIOConnPool.java:336)
>         at 
> org.apache.http.nio.pool.AbstractNIOConnPool.requestCancelled(AbstractNIOConnPool.java:513)
>         at 
> org.apache.http.nio.pool.AbstractNIOConnPool$InternalSessionRequestCallback.cancelled(AbstractNIOConnPool.java:801)
>         at 
> org.apache.http.impl.nio.reactor.SessionRequestImpl.cancel(SessionRequestImpl.java:221)
>         at 
> org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor.cancelRequests(DefaultConnectingIOReactor.java:135)
>         at 
> org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor.doShutdown(AbstractMultiworkerIOReactor.java:402)
>         at 
> org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor.execute(AbstractMultiworkerIOReactor.java:376)
>         at 
> org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.execute(PoolingNHttpClientConnectionManager.java:190)
>         at 
> org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase.doExecute(CloseableHttpAsyncClientBase.java:67)
>         at 
> org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase.access$000(CloseableHttpAsyncClientBase.java:38)
>         at 
> org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase$1.run(CloseableHttpAsyncClientBase.java:57)
>         at java.lang.Thread.run(Thread.java:780)
> My suggestion is to forbid next pending request processing if ioreactor is 
> shutting down



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to