Hello,

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




Thank you...

Regards,

Rajini

Reply via email to