multi-threading issue... deadlock. java API...
626593Jul 9 2008 — edited Jul 17 2008Hi all,
I have a classic deadlock in my code. The reason I'm posting here is because it appears the deadlock happens due to the following: XmlResults.next() call and a simultaneous XmlContainer.putDocument() call. I'm unsure of how to work around that problem, considering I can't prevent that simultaneous access. I'm hoping someone knows of an Environment or XmlManager configuration option that prevents this issue?
The stack trace follows. The only other thing you'd need to know to understand the stack trace is that I have a write lock (Semaphore) that I use to make sure there aren't two simultaneous writes occurring... however, I explicitly allow multiple reader threads.
Lastly, I'll note I just upgraded from 2.3.10 to 2.4.13. I created an entirely new database after moving to 2.4.13.
Thanks in advance.
Rerun org.cagrid.xml.db.berkeley.BerkeleyDBXMLConnectorTest.testMultithreadedQueriesAndSubmits [JUnit]
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner at localhost:3492 (Suspended)
Daemon System Thread [Finalizer] (Suspended)
Daemon System Thread [Reference Handler] (Suspended)
Thread [main] (Suspended)
Daemon System Thread [Signal Dispatcher] (Suspended)
Thread [ReaderThread] (Suspended)
Thread [Thread-2] (Suspended)
dbxml_javaJNI.XmlResults_nextInternal(long, XmlResults) line: not available [native method]
XmlResults.nextInternal() line: 162
XmlResults.next() line: 47
BerkeleyQueryResultsIterator.next() line: 69
BerkeleyDBXMLConnectorTest$QueryThread.run() line: 254
Thread [Thread-3] (Suspended)
dbxml_javaJNI.XmlResults_nextInternal(long, XmlResults) line: not available [native method]
XmlResults.nextInternal() line: 162
XmlResults.next() line: 47
BerkeleyQueryResultsIterator.next() line: 69
BerkeleyDBXMLConnectorTest$QueryThread.run() line: 254
Thread [Thread-5] (Suspended)
dbxml_javaJNI.XmlResults_nextInternal(long, XmlResults) line: not available [native method]
XmlResults.nextInternal() line: 162
XmlResults.next() line: 47
BerkeleyQueryResultsIterator.next() line: 69
BerkeleyDBXMLConnectorTest$QueryThread.run() line: 254
Thread [Thread-4] (Suspended)
dbxml_javaJNI.XmlResults_nextInternal(long, XmlResults) line: not available [native method]
XmlResults.nextInternal() line: 162
XmlResults.next() line: 47
BerkeleyQueryResultsIterator.next() line: 69
BerkeleyDBXMLConnectorTest$QueryThread.run() line: 254
Thread [Thread-7] (Suspended)
dbxml_javaJNI.XmlResults_nextInternal(long, XmlResults) line: not available [native method]
XmlResults.nextInternal() line: 162
XmlResults.next() line: 47
BerkeleyQueryResultsIterator.next() line: 69
BerkeleyDBXMLConnectorTest$QueryThread.run() line: 254
Thread [Thread-9] (Suspended)
dbxml_javaJNI.XmlResults_nextInternal(long, XmlResults) line: not available [native method]
XmlResults.nextInternal() line: 162
XmlResults.next() line: 47
BerkeleyQueryResultsIterator.next() line: 69
BerkeleyDBXMLConnectorTest$QueryThread.run() line: 254
Thread [Thread-6] (Suspended)
dbxml_javaJNI.XmlResults_nextInternal(long, XmlResults) line: not available [native method]
XmlResults.nextInternal() line: 162
XmlResults.next() line: 47
BerkeleyQueryResultsIterator.next() line: 69
BerkeleyDBXMLConnectorTest$QueryThread.run() line: 254
Thread [Thread-8] (Suspended)
dbxml_javaJNI.XmlResults_nextInternal(long, XmlResults) line: not available [native method]
XmlResults.nextInternal() line: 162
XmlResults.next() line: 47
BerkeleyQueryResultsIterator.next() line: 69
BerkeleyDBXMLConnectorTest$QueryThread.run() line: 254
Thread [Thread-11] (Suspended)
dbxml_javaJNI.XmlResults_nextInternal(long, XmlResults) line: not available [native method]
XmlResults.nextInternal() line: 162
XmlResults.next() line: 47
BerkeleyQueryResultsIterator.next() line: 69
BerkeleyDBXMLConnectorTest$QueryThread.run() line: 254
Thread [Thread-13] (Suspended)
dbxml_javaJNI.XmlContainer_putDocument__SWIG_7(long, XmlContainer, long, XmlTransaction, String, long, XmlInputStream, int) line: not available [native method]
XmlContainer.putDocument(XmlTransaction, String, XmlInputStream, int) line: 917
XmlContainer.putDocument(XmlTransaction, String, XmlInputStream, XmlUpdateContext, XmlDocumentConfig) line: 173
XmlContainer.putDocument(XmlTransaction, String, XmlInputStream, XmlUpdateContext) line: 151
BerkeleyDbXmlHelper.submitWithRetry(String, XmlUpdateContext) line: 619
BerkeleyDbXmlHelper.submit(String) line: 594
BerkeleyDBXMLConnector.submitFile(String) line: 1133
BerkeleyDBXMLConnectorTest$SubmitThread.run() line: 291
Thread [Thread-15] (Suspended)
Unsafe.park(boolean, long) line: not available [native method]
LockSupport.park() line: 118
AbstractQueuedSynchronizer.parkAndCheckInterrupt() line: 681
Semaphore$FairSync(AbstractQueuedSynchronizer).doAcquireSharedInterruptibly(int) line: 837
Semaphore$FairSync(AbstractQueuedSynchronizer).acquireSharedInterruptibly(int) line: 1144
Semaphore.acquire() line: 272
BerkeleyDbXmlHelper.submit(String) line: 565
BerkeleyDBXMLConnector.submitFile(String) line: 1133
BerkeleyDBXMLConnectorTest$SubmitThread.run() line: 291
Thread [Thread-10] (Suspended)
Unsafe.park(boolean, long) line: not available [native method]
LockSupport.park() line: 118
AbstractQueuedSynchronizer.parkAndCheckInterrupt() line: 681
Semaphore$FairSync(AbstractQueuedSynchronizer).doAcquireSharedInterruptibly(int) line: 837
Semaphore$FairSync(AbstractQueuedSynchronizer).acquireSharedInterruptibly(int) line: 1144
Semaphore.acquire() line: 272
BerkeleyDbXmlHelper.queryNoTx(String) line: 225
BerkeleyDBXMLConnector.queryByXPath(String) line: 1126
BerkeleyDBXMLConnectorTest$QueryThread.run() line: 248
Thread [Thread-12] (Suspended)
Unsafe.park(boolean, long) line: not available [native method]
LockSupport.park() line: 118
AbstractQueuedSynchronizer.parkAndCheckInterrupt() line: 681
Semaphore$FairSync(AbstractQueuedSynchronizer).doAcquireSharedInterruptibly(int) line: 837
Semaphore$FairSync(AbstractQueuedSynchronizer).acquireSharedInterruptibly(int) line: 1144
Semaphore.acquire() line: 272
BerkeleyDbXmlHelper.submit(String) line: 565
BerkeleyDBXMLConnector.submitFile(String) line: 1133
BerkeleyDBXMLConnectorTest$SubmitThread.run() line: 291
Thread [Thread-14] (Suspended)
Unsafe.park(boolean, long) line: not available [native method]
LockSupport.park() line: 118
AbstractQueuedSynchronizer.parkAndCheckInterrupt() line: 681
Semaphore$FairSync(AbstractQueuedSynchronizer).doAcquireSharedInterruptibly(int) line: 837
Semaphore$FairSync(AbstractQueuedSynchronizer).acquireSharedInterruptibly(int) line: 1144
Semaphore.acquire() line: 272
BerkeleyDbXmlHelper.submit(String) line: 565
BerkeleyDBXMLConnector.submitFile(String) line: 1133
BerkeleyDBXMLConnectorTest$SubmitThread.run() line: 291
Thread [Thread-16] (Suspended)
Unsafe.park(boolean, long) line: not available [native method]
LockSupport.park() line: 118
AbstractQueuedSynchronizer.parkAndCheckInterrupt() line: 681
Semaphore$FairSync(AbstractQueuedSynchronizer).doAcquireSharedInterruptibly(int) line: 837
Semaphore$FairSync(AbstractQueuedSynchronizer).acquireSharedInterruptibly(int) line: 1144
Semaphore.acquire() line: 272
BerkeleyDbXmlHelper.submit(String) line: 565
BerkeleyDBXMLConnector.submitFile(String) line: 1133
BerkeleyDBXMLConnectorTest$SubmitThread.run() line: 291
C:\Program Files\Java\jdk1.5.0_11\bin\javaw.exe (Jul 9, 2008 3:49:24 PM)