On 12/18/13, 09:06 , Daniel McGreal wrote:
> Hi,
> I wonder if this issue could be the cause, or related to problems when 
> running on JamVM (e.g. GNU Classpath) described here: 
> https://www.mail-archive.com/[email protected]/msg31518.html
> Best, Dan.

I don't think they are related. Your issue deals with class loader
locks, not the global lock (which is a Felix framework-specific thing).

-> richard

>
> On 18 Dec 2013, at 13:57, Felix Meschberger <[email protected]> wrote:
>
>> Hi
>>
>> Am 17.12.2013 um 14:25 schrieb Richard S. Hall <[email protected]>:
>>
>>> On 12/17/13, 04:36 , Tang Yong wrote:
>>>> Hi All,
>>>>
>>>> I met an issue as the following,
>>>>
>>>> ...
>>>> Caused by: org.osgi.framework.BundleException: Unable to acquire global
>>>> lock for resolve.
>>>>    at 
>>>> org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3832)
>>>>    at org.apache.felix.framework.Felix.startBundle(Felix.java:1868)
>>>>    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:944)
>>>> ...
>>>>
>>>> Richard said the issue is not a bug[1] of felix, and I also agree with him.
>>>>
>>>> However, I want to say once we truely met the issue and try to catch the
>>>> exception on upper layer, how can we do?
>>>>
>>>> I think that best way should be: felix offered some api to let us
>>>> retrieve whether bundle lock has been released by other thread.
>>>>
>>>> The second way can be: do a loop and wait for the changing of current
>>>> bundle state, and set a timeout to avoid infinite loop.
>>>>
>>>> The third way should be: adjusting upper layer's bundles and decoupling
>>>> them to avoid the case…
>> I think there is a patch around somewhere in the issues where I proposed to 
>> actually implement such a loop and timeout in the acquireGlobalLock method 
>> itself. Yet, it does not solve the problem really so we never applied.
>>
>>>> Want to listen your ideas.
>>> The main way I'd like to address this issue is to simply avoid it by
>>> eliminating the use of the global lock altogether. What I had thought
>>> about long ago was to simply make resolving optimistic so that it would
>>> work on a copy of the framework state and if the framework state changed
>>> at the end of the resolve, it would try to resolve again until the
>>> framework state didn't change (perhaps with a retry limit).
>> This sounds promising.
>>
>> Unfortunately we hit this deadlock every now and then, even though we try 
>> hard to setup our system to prevent (for example by carefully leveraging the 
>> start level service on startup; nasty but pragmatic) them.
>>
>> Regrds
>> Felix
>>
>>
>>> The only other place that uses the global lock is for refreshing, but we
>>> could probably eliminate it there in a somewhat similar fashion by
>>> calculating all needed bundle locks in advance and locking all bundles
>>> individually (you'd still need to double check the calculation to make
>>> sure nothing changed and potentially release and try again).
>>>
>>> -> richard
>>>
>>>> [1]:http://mail-archives.apache.org/mod_mbox/felix-users/201102.mbox/%[email protected]%3E
>>>>
>>>> Thanks
>>>> Tang
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to