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

Brett Bergquist commented on DERBY-5560:
----------------------------------------

Partial stack trace of first thread:


        at 
org.apache.derby.client.ClientPooledConnection.recycleConnection(ClientPooledConnection.java:353)
        - waiting to lock <0xfffffffc80843f18> (a 
org.apache.derby.client.ClientXAConnection40)
        at 
org.apache.derby.client.am.LogicalConnection.close(LogicalConnection.java:91)
        - locked <0xfffffffc85f35508> (a 
org.apache.derby.client.am.LogicalConnection40)
        at 
com.sun.gjc.spi.ManagedConnection.transactionCompleted(ManagedConnection.java:492)
        at com.sun.gjc.spi.XAResourceImpl.commit(XAResourceImpl.java:88)
        at 
com.sun.jts.jtsxa.OTSResourceImpl.commit_one_phase(OTSResourceImpl.java:166)
        at 
com.sun.jts.CosTransactions.RegisteredResources.commitOnePhase(RegisteredResources.java:1575)
        at 
com.sun.jts.CosTransactions.TopCoordinator.commitOnePhase(TopCoordinator.java:2949)
        at 
com.sun.jts.CosTransactions.CoordinatorTerm.commit(CoordinatorTerm.java:317)
        at 
com.sun.jts.CosTransactions.TerminatorImpl.commit(TerminatorImpl.java:250)
        - locked <0xfffffffc8597bea0> (a 
com.sun.jts.CosTransactions.TerminatorImpl)
        at com.sun.jts.CosTransactions.CurrentImpl.commit(CurrentImpl.java:623)
        at 
com.sun.jts.jta.TransactionManagerImpl.commit(TransactionManagerImpl.java:309)
        at 
com.sun.enterprise.distributedtx.J2EETransactionManagerImpl.commit(J2EETransactionManagerImpl.java:1003)
        at 
com.sun.enterprise.distributedtx.J2EETransactionManagerOpt.commit(J2EETransactionManagerOpt.java:398)

Partial stack trace of second thread:


        at 
org.apache.derby.client.am.LogicalConnection.nullPhysicalConnection(LogicalConnection.java:64)
        - waiting to lock <0xfffffffc85f35508> (a 
org.apache.derby.client.am.LogicalConnection40)
        at 
org.apache.derby.client.ClientPooledConnection.close(ClientPooledConnection.java:204)
        - locked <0xfffffffc80843f18> (a 
org.apache.derby.client.ClientXAConnection40)
        at 
org.apache.derby.client.ClientXAConnection.close(ClientXAConnection.java:139)
        - locked <0xfffffffc80843f18> (a 
org.apache.derby.client.ClientXAConnection40)
        at com.sun.gjc.spi.ManagedConnection.destroy(ManagedConnection.java:276)
        at 
com.sun.enterprise.resource.ConnectorAllocator.destroyResource(ConnectorAllocator.java:175)
        at 
com.sun.enterprise.resource.AbstractResourcePool.destroyResource(AbstractResourcePool.java:986)
        at 
com.sun.enterprise.resource.AbstractResourcePool.emptyPool(AbstractResourcePool.java:1635)
        - locked <0xfffffffc72af99c0> (a 
com.sun.enterprise.resource.SJSASResourcePool)
        at 
com.sun.enterprise.resource.AbstractResourcePool.doFailAllConnectionsProcessing(AbstractResourcePool.java:1213)
        at 
com.sun.enterprise.resource.AbstractResourcePool.resourceErrorOccurred(AbstractResourcePool.java:1163)
        - locked <0xfffffffc72af99c0> (a 
com.sun.enterprise.resource.SJSASResourcePool)
        at 
com.sun.enterprise.resource.PoolManagerImpl.putbackResourceToPool(PoolManagerImpl.java:445)
        at 
com.sun.enterprise.resource.PoolManagerImpl.resourceErrorOccurred(PoolManagerImpl.java:411)
        at 
com.sun.enterprise.resource.ConnectorAllocator$ConnectionListenerImpl.connectionErrorOccurred(ConnectorAllocator.java:98)
        at 
com.sun.gjc.spi.ManagedConnection.connectionErrorOccurred(ManagedConnection.java:662)
        at 
com.sun.gjc.spi.ManagedConnectionFactory.getInvalidConnections(ManagedConnectionFactory.java:249)
        at 
com.sun.enterprise.resource.AbstractConnectorAllocator.getInvalidConnections(AbstractConnectorAllocator.java:99)
        at 
com.sun.enterprise.resource.AbstractConnectorAllocator.isConnectionValid(AbstractConnectorAllocator.java:111)
        at 
com.sun.enterprise.resource.AbstractResourcePool.isConnectionValid(AbstractResourcePool.java:722)
        at 
com.sun.enterprise.resource.AbstractResourcePool.getUnenlistedResource(AbstractResourcePool.java:668)
        at 
com.sun.enterprise.resource.AbstractResourcePool.internalGetResource(AbstractResourcePool.java:609)
        at 
com.sun.enterprise.resource.AbstractResourcePool.getResource(AbstractResourcePool.java:458)
        at 
com.sun.enterprise.resource.PoolManagerImpl.getResourceFromPool(PoolManagerImpl.java:248)
        at 
com.sun.enterprise.resource.PoolManagerImpl.getResource(PoolManagerImpl.java:176)
        at 
com.sun.enterprise.connectors.ConnectionManagerImpl.internalGetConnection(ConnectionManagerImpl.java:337)
        at 
com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:189)
        at 
com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:165)
        at 
com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:158)

                
> Java deadlock between LogicalConnection40 and ClientXAConnection40
> ------------------------------------------------------------------
>
>                 Key: DERBY-5560
>                 URL: https://issues.apache.org/jira/browse/DERBY-5560
>             Project: Derby
>          Issue Type: Bug
>          Components: Network Client
>    Affects Versions: 10.8.2.2
>         Environment: Solaris 10
> Glassfish V2.1.1 
> ClientXADataSource connection pool setup to close all connections on any error
>            Reporter: Brett Bergquist
>
> There is a Java deadlock between LogicalConnection40 and 
> ClientXAConnection40.  The order of calls that cause the deadlock are:
> Thread 1
> ----
> LogicalConnection.close
> ClientPooledConnection.recycleConnection
> Thread 2
> ----
> ClientPooledConnection.close
> LogicalConnection.nullPhysicalConnection
> Thread 1 acquires a lock on the LogicalConnection and attempts to acquire a 
> lock on the ClientPooledConnection
> Thread 2 acquires a lock on the ClientPooledConnection and attempts to 
> acquire a lock on the LogicalConnection
> In production this occurs when one thread is committing a transaction and 
> another thread is trying to close the connection.  This occurred because the 
> Glassfish connection pool is setup to close all connections on any error on 
> any connection and an error has been detected on another connection in the 
> pool.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to