Dmitry Potapov created HTTPCORE-376:
---------------------------------------

             Summary: 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


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