[ 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.