Skip to Main Content

Berkeley DB Family

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

multi-threading issue... deadlock. java API...

626593Jul 9 2008 — edited Jul 17 2008
Hi 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)
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Aug 14 2008
Added on Jul 9 2008
15 comments
2,332 views