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.GA
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:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira