Dmitry Potapov created HTTPASYNC-68:
---------------------------------------

             Summary: DefaultClientExchangeHandlerImpl.requestConnection() must 
close current managed connection
                 Key: HTTPASYNC-68
                 URL: https://issues.apache.org/jira/browse/HTTPASYNC-68
             Project: HttpComponents HttpAsyncClient
          Issue Type: Bug
    Affects Versions: 4.0 Final
            Reporter: Dmitry Potapov


Consider the following scenario:
1. HttpAsyncClient.execute() creates DefaultClientExchangeHandlerImpl and calls 
DefaultClientExchangeHandlerImpl.start()
2. DefaultClientExchangeHandlerImpl.start() in turn calls .requestConnection()
3. .requestConnection() asks connection pool for connection
4. Connection pool creates new connection to target server and returns callback 
to the DefaultClientExchangeHandlerImpl
5. DefaultClientExchangeHandlerImpl stores connection to managedConn and sends 
request to server
6. Server sends TCP FIN
7. Client's AbstractIOReactor notices activity in socket channel and calls 
DefaultNHttpClientConnection.consumeInput()
8. DefaultNHttpClientConnection.consumeInput() detects eof on connection and 
calls DefaultClientExchangeHandlerImpl.inputTerminated()
9. DefaultClientExchangeHandlerImpl.inputTerminated() in turn calls 
DefaultClientExchangeHandlerImpl.requestConnection()
10. Connection pool creates another connection to server and returns it to 
DefaultClientExchangeHandlerImpl.
11. DefaultClientExchangeHandlerImpl stores newly allocated connection to 
managedConn and does nothing with its previous value. So previous connection 
left open and not returned to pool. If maxPerRoute is relatively small, all 
connections can be exhausted before gc will occur and requests will hang for 
indefinite time



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

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

Reply via email to