We just recently began some soak testing of our JBoss application. In the last two runs of this soak test we have had three separate machines get into a hung state. Each of those machines end up hung in the same method AbstractInstanceCache.tryToPassivate(). The following thread dump shows the call stack of the stuck thread. Looking at the code for BeanLockSupport.sync() it seems as though the only way this thread can get hung here is if another thread already had entered the sync() method previously.
Has any one seen any thing similar to this problem?
This certainly looks like it could be a JBoss bug!
"Thread-46" daemon prio=1 tid=0x6d98f3c8 nid=0x1598 in Object.wait() [b5dff000..b5dff908]
at java.lang.Object.wait(Native Method)
- waiting on <0x4a8a9ae0> (a org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock)
- locked <0x4a8a9ae0> (a org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock)
- locked <0x45910820> (a java.lang.Object)
Hey y'all--someone could have told me that this bug is fixed in JBoss-3_2_2. Went on a merry chase through the source code and found out that someone figured a way to get around this deadlock (See changes to LRUEnterpriseContextCachePolicy.java)! Would have been nice if someone had replied to my question!