Felix Meschberger created SLING-2558:
----------------------------------------

             Summary: Potential Deadlocks may be caused by AdapterManager
                 Key: SLING-2558
                 URL: https://issues.apache.org/jira/browse/SLING-2558
             Project: Sling
          Issue Type: Improvement
          Components: Extensions
    Affects Versions: Adapter 2.0.16
            Reporter: Felix Meschberger
             Fix For: Adapter 2.0.18


The AdapterManager uses a cascade of three synchronized blocks when the 
AdapterFactoryDescriptor.getFactory() method is called:

  * synchronized(cache)
  * synchronized(factories)
  * synchronized(this)

A potential deadlock may happen because the 
AdapterFactoryDescriptor.getFactory() method asks the Declarative Services 
runtime for a service, which may cause a ServiceFactory service to be 
instantiated (with a whole cascade of potential secondary actions depending on 
what happens on this instantiation).

The last block can probably simply be removed while the others definitely have 
to be refactored to not be the cause or participants in deadlock situations. 
The reason for this is, that (a) synchronized blocks must not be too large and 
(b) no Java locks should be held when calling into the OSGi Framework, which 
happens in the AdapterFactoryDescriptor.getFactory method.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to