]
Flavia Rainone updated JBAOP-500:
---------------------------------
Fix Version/s: 2.0.0.CR3
(was: 2.0.0.GA)
Deadlock involving Interceptor Chain lock and class loading
-----------------------------------------------------------
Key: JBAOP-500
URL:
http://jira.jboss.com/jira/browse/JBAOP-500
Project: JBoss AOP
Issue Type: Sub-task
Security Level: Public(Everyone can see)
Affects Versions: 2.0.0.CR2
Reporter: Flavia Rainone
Assigned To: Flavia Rainone
Fix For: 2.0.0.CR3
Attachments: threaddump2.txt
This deadlock can be reproduced by running the rebuildingchain test (written to detect
bug JBAOP-380)
The scenario of this deadlock is the following:
-Thread 0 (org.jboss.test.aop.rebuldingchain.SyncThread)
When this thread calls the joinpoint SyncThread.checkStatus, its wrapper is executed.
This wrapper needs to generate the Joinpoint class to do interception and, hence, acquires
the lock for InterceptorChain read. As part of the generation fo the Joinpoint class, this
class must be loaded. When the class loader loads this class, AOPTransformer is invoked.
This class triggers the transformation of the class, which requires the AspectManager
lock.
- Thread 1 (org.jboss.test.aop.rebuildingchain.RebuildThread)
This thread adds a binding to AspectManager. As part of the addBinding method
execution, the AspectManager lock is acquired. As soon as the binding is addded to the
bindings collection, the affect advisors have to rebuild their interceptor chains.
SyncThread advisor is the affected advisor in this scenario and, to rebuild chains, it
needs the write lock for the SyncThread.checkStatus inteceptor chain. This thread starts
waiting for Thread0 to release the interceptor chain read lock.
- Main Thread
Waits for the other two threads to finish.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: