[ 
https://issues.apache.org/jira/browse/FELIX-489?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Richard S. Hall resolved FELIX-489.
-----------------------------------

    Resolution: Fixed

After much discussion with Karl, we have created a patch that makes locking in 
the service registry more fine-grained to avoid holding locks when performing 
callbacks to the service factory. Rajini, please test and see if this resolves 
your issues. If so, please close the bug.

> Intermittent deadlock while using declarative services in Tuscany   
> --------------------------------------------------------------------
>
>                 Key: FELIX-489
>                 URL: https://issues.apache.org/jira/browse/FELIX-489
>             Project: Felix
>          Issue Type: Bug
>          Components: Declarative Services
>    Affects Versions: 1.0.0
>            Reporter: Rajini Sivaram
>            Assignee: Karl Pauls
>
> One of my tests using declarative services hangs intermittently. The stack 
> trace from a debugger shows two threads waiting for locks owned by the other. 
> I am using Felix framework 1.0.3 and SCR 1.0.0. The call from the main thread 
> to getService is triggered by Tuscany - I am not sure if there are times when 
> it shouldn't call bundleContext.getService. But the order of locking in the 
> two threads are different leading to the deadlock - is it something that 
> could be fixed? The main thread owns the ServiceRegistry lock and is waiting 
> for the lock on ServiceFactoryComponentManager, while the configuration 
> updater owns the ServiceFactoryComponentManager lock and is waiting for the 
> ServiceRegistry lock.
>  
>  
> Thread [main] (Suspended) 
>    ServiceFactoryComponentManager.getService(Bundle, ServiceRegistration) 
> line: 111 
>    ServiceRegistrationImpl.getFactoryUnchecked(Bundle) line: 245 
>    ServiceRegistrationImpl.getService(Bundle) line: 179 
>    ServiceRegistry.getService(Bundle, ServiceReference) line: 238 
>    Felix.getService(Bundle, ServiceReference) line: 2835 
>    BundleContextImpl.getService(ServiceReference) line: 417 
>    .............. (Tuscany)
>  
> Thread [Configuration Updater] (Suspended) 
>    ServiceRegistry.unregisterService(Bundle, ServiceRegistration) line: 78 
>    ServiceRegistrationImpl.unregister() line: 99 
>    
> ServiceFactoryComponentManager(AbstractComponentManager).unregisterComponentService()
>  line: 610 
>    
> ServiceFactoryComponentManager(AbstractComponentManager).deactivateInternal() 
> line: 464 
>    ServiceFactoryComponentManager(AbstractComponentManager).reactivate() 
> line: 142 
>    
> ServiceFactoryComponentManager(ImmediateComponentManager).reconfigure(Dictionary)
>  line: 399 
>    ImmediateComponentManager$1.updated(Dictionary) line: 90 
>    ConfigurationManager$ManagedServiceUpdate.run() line: 863 
>    UpdateThread.run() line: 89 
>  
>  

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to