[ 
https://issues.apache.org/jira/browse/HTTPCORE-331?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13556867#comment-13556867
 ] 

Scott Stanton commented on HTTPCORE-331:
----------------------------------------

Digging through the stacks, this is what happened in each thread:

agent-004
    inputReady catches exception
    HttpAsyncRequestExecutor.exception gets handler(1) from connection
    closehandler calls handler(1).failed
    future.failed locks (0x00000007c76d23c8)
    failed calls pool release, blocks on 0x00000007363b3050

statemachine-4367
    wants to send a request
    calls lease on pool (acquires lock 0x00000007363b3050)
    pool acquires pool lock
    calls processPendingRequests
    calls completed on future
    calls completed on callback (locks 0x00000007c76d2508)
    doExecute on  a new BasicAsyncRequestExecutionHandler(1)
      handler gets attached to connection
    connection is not open
    calls handler(1).failed
    future.failed (blocks on 0x00000007c76d23c8)

statemachine-4425
    blocked on lock pool for lease 0x00000007363b3050

I think the handler leaked from statemachine-4367 to agent-004 by way of the 
HTTP_HANDLER on the connection.
I'm not sure why both threads are operating on the same connection, but the 
locking is not ordered, so in one case the pool lock is grabbed before the 
handler and in the other case the reverse is true, hence the deadlock.  I think 
the fact that the handlers can call into the pool and vice versa is a recipe 
for deadlock.  I have no idea how to resolve any of this, though.

                
> deadlock in AbstractNIOConnPool
> -------------------------------
>
>                 Key: HTTPCORE-331
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-331
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>          Components: HttpCore NIO
>    Affects Versions: 4.2.4
>         Environment: jjdk 1.7.0_u10
>            Reporter: Scott Stanton
>            Priority: Blocker
>         Attachments: stacks
>
>
> I have run into a deadlock in the AbstractNIOConnPool.  I have attached the 
> deadlock stacks.  I'm not entirely sure what's going on yet, but it appears 
> that nested futures are causing lock ordering problems.

--
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to