[
https://issues.apache.org/jira/browse/JENA-161?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Andy Seaborne resolved JENA-161.
--------------------------------
Resolution: Fixed
Fix applied to SVN - Transaction object should not be locked when calling into
the TransactionManager because it may call back into a Transaction. See patch
attachment.
TDBTxnDeadlockTest.java incorporated into the test suite as T_TxnDeadlockTest.
This will be closed when confirmed or no reports received after a week or so.
> TDB Transaction deadlock
> ------------------------
>
> Key: JENA-161
> URL: https://issues.apache.org/jira/browse/JENA-161
> Project: Jena
> Issue Type: Bug
> Components: TDB
> Affects Versions: TDB 0.9.0
> Environment: Windows 7 64 bit. I am using the snapshot of SVN of 10
> November 2011
> Reporter: Simon Helsen
> Assignee: Andy Seaborne
> Attachments: JENA161_patch.txt, TDBTxnDeadlockTest.java
>
>
> While running some tests I ran into a deadlock. Unfortunately, on my 64 bit
> windows 7, I was unable to trigger the complete stack trace. (there is no
> equivalent of kill -3 and all known utilities to achieve this on windows
> don't work with a 64 bit process). I was able to see two of the threads which
> were hanging (because of a UI view in our admin console), but it is not
> showing the other threads (which I'd need to see why the 2 threads I do have
> are hanging). I will show the 2 threads which are hanging here in the hope it
> rings a bell. I hope I will be able to get a full set of stack traces at some
> point
> as for an analysis: Not sure if we are dealing with a double-crossed locking
> issue here. It seems that thread 2 is waiting for thread 1 who clearly has
> the lock on the transaction manager, but it is not clear why it is waiting on
> the Transaction object. It seems that some other thread still has it and the
> question is whether thread 2 could be the one (so there is a crossing of the
> locks)? It would surprise me because thread 1 is doing a READ transaction and
> thread 2 is doing a separate WRITE transaction.
> thread 1:
> ------------
> com.hp.hpl.jena.tdb.transaction.Transaction.signalEnacted(Transaction.java:178)
>
> com.hp.hpl.jena.tdb.transaction.TransactionManager.enactTransaction(TransactionManager.java:384)
>
> com.hp.hpl.jena.tdb.transaction.TransactionManager.processDelayedReplayQueue(TransactionManager.java:419)
>
> com.hp.hpl.jena.tdb.transaction.TransactionManager$TSM_WriteBackEndTxn.readerFinishes(TransactionManager.java:189)
>
> com.hp.hpl.jena.tdb.transaction.TransactionManager.readerFinishes(TransactionManager.java:609)
>
> com.hp.hpl.jena.tdb.transaction.TransactionManager.noteTxnCommit(TransactionManager.java:472)
>
> com.hp.hpl.jena.tdb.transaction.TransactionManager.notifyCommit(TransactionManager.java:349)
> com.hp.hpl.jena.tdb.transaction.Transaction.commit(Transaction.java:100)
> com.hp.hpl.jena.tdb.transaction.Transaction.close(Transaction.java:151)
> com.hp.hpl.jena.tdb.DatasetGraphTxn.close(DatasetGraphTxn.java:55)
>
> com.ibm.team.jfs.rdf.internal.jena.tdb.JenaTdbTxProvider.storeOperation(JenaTdbTxProvider.java:179)
> <snip>
> thread 2
> ------------
> com.hp.hpl.jena.tdb.transaction.TransactionManager.notifyClose(TransactionManager.java:445)
> com.hp.hpl.jena.tdb.transaction.Transaction.close(Transaction.java:162)
> com.hp.hpl.jena.tdb.DatasetGraphTxn.close(DatasetGraphTxn.java:55)
>
> com.ibm.team.jfs.rdf.internal.jena.tdb.JenaTdbTxProvider.storeOperation(JenaTdbTxProvider.java:285)
>
> com.ibm.team.jfs.rdf.internal.jena.tdb.JenaTdbTxProvider.unprotectedDelete(JenaTdbTxProvider.java:1902)
>
> com.ibm.team.jfs.rdf.internal.jena.tdb.JenaTdbTxProvider.delete(JenaTdbTxProvider.java:664)
> <snip>
--
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