Prevent Deadlock Situation in Felix.acquireGlobalLock
-----------------------------------------------------
Key: FELIX-3067
URL: https://issues.apache.org/jira/browse/FELIX-3067
Project: Felix
Issue Type: Improvement
Components: Framework
Affects Versions: fileinstall-3.1.10, framework-3.2.1, framework-3.2.0,
framework-3.0.9, framework-3.0.8, framework-3.0.7
Reporter: Felix Meschberger
Every now and then we encounter deadlock situations which involve the
Felix.acquireGlobalLock method. In our use case we have the following aspects
which contribute to this:
(a) The Apache Felix Declarative Services implementation stops components (and
thus causes service unregistration) while the bundle lock is being held because
this happens in a SynchronousBundleListener while handling the STOPPING bundle
event. We have to do this to ensure the bundle is not really stopped yet to
properly stop the bundle's components.
(b) Implementing a special class loader which involves dynamically resolving
packages which in turn uses the global lock
(c) Eclipse Gemini Blueprint implementation which operates asynchronously
(d) synchronization in application classes
Often times, I would assume that we can self-heal such complex deadlck
situations, if we let acquireGlobalLock time out. Looking at the calles of
acquireGlobalLock there seems to already be provision to handle this case since
acquireGlobalLock returns true only if the global lock has actually been
acquired.
This issue is kind of a companion to FELIX-3000 where deadlocks involve sending
service registration events while holding the bundle lock.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira