You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by Jad Naous <ja...@nerati.com> on 2013/01/01 12:09:24 UTC

Re: IPOJO initialization + refresh deadlock

Happy new year!

I'm running into another deadlock now. It seems like there needs to be a
more rigorous study of how locking is used in the framework. In particular,
it seems like the framework should not be invoking any listeners within the
same thread that's executing the stopping/starting/refreshing of bundles...
Anywhere that happens there will be a potential for a deadlock because of a
misordering of lock acquisition. The framework should never call into user
code with any locks held.

Name: Thread-2
State: WAITING on [Ljava.lang.Object;@4a018e1b
Total blocked: 38,871,649  Total waited: 38,871,650

Stack trace:
 java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:485)
org.apache.felix.framework.Felix.acquireGlobalLock(Felix.java:5033)
org.apache.felix.framework.StatefulResolver.resolve(StatefulResolver.java:451)
org.apache.felix.framework.BundleWiringImpl.searchDynamicImports(BundleWiringImpl.java:1578)
org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1478)
org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1882)
java.lang.ClassLoader.loadClass(ClassLoader.java:247)
org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1356)
org.apache.felix.framework.ServiceRegistrationImpl$ServiceReferenceImpl.isAssignableTo(ServiceRegistrationImpl.java:548)
org.apache.felix.framework.util.Util.isServiceAssignable(Util.java:280)
org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:916)
org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:793)
org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:543)
org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4346)
org.apache.felix.framework.Felix.registerService(Felix.java:3356)
org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:346)
org.apache.felix.ipojo.IPojoFactory.start(IPojoFactory.java:613)
   - locked org.apache.felix.ipojo.ComponentFactory@468034b6
org.apache.felix.ipojo.Extender.createAbstractFactory(Extender.java:520)
org.apache.felix.ipojo.Extender.parse(Extender.java:301)
org.apache.felix.ipojo.Extender.startManagementFor(Extender.java:237)
org.apache.felix.ipojo.Extender.access$600(Extender.java:52)
org.apache.felix.ipojo.Extender$CreatorThread.run(Extender.java:769)
java.lang.Thread.run(Thread.java:662)

Name: FelixFrameworkWiring
State: BLOCKED on org.apache.felix.ipojo.ComponentFactory@468034b6 owned
by: Thread-2
Total blocked: 7  Total waited: 1

Stack trace:
 org.apache.felix.ipojo.IPojoFactory.removeFactoryStateListener(IPojoFactory.java:511)
org.apache.felix.ipojo.InstanceCreator.removeFactory(InstanceCreator.java:199)
org.apache.felix.ipojo.Extender.closeManagementFor(Extender.java:180)
org.apache.felix.ipojo.Extender.bundleChanged(Extender.java:153)
org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:868)
org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:789)
org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:514)
org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4330)
org.apache.felix.framework.Felix.stopBundle(Felix.java:2451)
org.apache.felix.framework.Felix$RefreshHelper.stop(Felix.java:4715)
org.apache.felix.framework.Felix.refreshPackages(Felix.java:4037)
org.apache.felix.framework.FrameworkWiringImpl.run(FrameworkWiringImpl.java:178)
java.lang.Thread.run(Thread.java:662)



On Sat, Dec 22, 2012 at 6:39 PM, Richard S. Hall <he...@ungoverned.org>wrote:

> On 12/22/12 20:41 , Jad Naous wrote:
>
>> Thanks! I was building with java6. Don't know if that is the issue.
>> Anyway,
>> I tested the snapshot, and looks like that fixes it.
>>
>> Any idea when 4.1.0 will be released? Do you know if
>> http://svn.apache.org/viewvc?**view=revision&revision=1421958<http://svn.apache.org/viewvc?view=revision&revision=1421958>will apply
>> cleanly onto 4.0.3? Otherwise, how stable do you think is 4.1.0-SNAPSHOT?
>>
>
> The release version will be 4.2.0, but the 4.1.0-SNAPSHOT build should be
> reasonably stable. We try to keep trunk stable.
>
> I want to try to get a release out soon, but I don't have a specific time
> table. I'll try to get in done in January if all goes well.
>
> -> richard
>
>
>> Thanks!
>>
>> Jad.
>>
>>
>>
>> On Fri, Dec 21, 2012 at 6:49 AM, Richard S. Hall <heavy@ungoverned.org
>> >wrote:
>>
>>  It built fine for me. I'm was building with Java 7.
>>>
>>> Regardless, I deployed snapshots of framework, main, and
>>> main.distribution, so just grab what you want from the Apache snapshot
>>> repo
>>> to try it out.
>>>
>>> -> richard
>>>
>>>
>>> On 12/20/12 18:56 , Jad Naous wrote:
>>>
>>>  It does look like the same issue.
>>>>
>>>> Got the trunk/framework. mvn clean install gives:
>>>>
>>>> [INFO] --- maven-compiler-plugin:2.3.2:****compile (default-compile) @
>>>> org.apache.felix.framework ---
>>>> Dec 20, 2012 3:54:59 PM org.sonatype.guice.bean.****
>>>> reflect.Logs$JULSink
>>>> warn
>>>> WARNING: Error injecting: org.apache.maven.plugin.****CompilerMojo
>>>> java.lang.****NoClassDefFoundError:
>>>> org/codehaus/plexus/compiler/****util/scan/****InclusionScanException
>>>>
>>>>
>>>> Thanks,
>>>> jad.
>>>>
>>>>
>>>> On Thu, Dec 20, 2012 at 3:22 PM, Richard S. Hall <heavy@ungoverned.org
>>>>
>>>>> wrote:
>>>>>
>>>>   On 12/20/12 4:10 PM, Jad Naous wrote:
>>>>
>>>>>   If a bundle undergoes a refresh while ipojo is still initializing
>>>>>
>>>>>> components, a deadlock can happen.  The issue is that if ipojo is
>>>>>> attempting to register a service, it will be doing it while
>>>>>> synchronizing
>>>>>> on the InstanceCreator instance. It will then try to register a
>>>>>> service
>>>>>> which requires the framework's global lock.
>>>>>>
>>>>>>   Registering a service doesn't require a global, just a bundle lock.
>>>>>> I
>>>>>>
>>>>> think this could be related to:
>>>>>
>>>>>       https://issues.apache.org/******jira/browse/FELIX-3761<https://issues.apache.org/****jira/browse/FELIX-3761>
>>>>> <https:/**/issues.apache.org/**jira/**browse/FELIX-3761<https://issues.apache.org/**jira/browse/FELIX-3761>
>>>>> >
>>>>> <https:/**/issues.apache.org/**jira/**browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3761<https://issues.apache.org/jira/browse/FELIX-3761>
>>>>> >
>>>>>
>>>>>
>>>>> This avoid grabbing the bundle lock when registering a service, so
>>>>> maybe
>>>>> it will help your situation. You could try to build the framework from
>>>>> trunk and see if it makes a difference.
>>>>>
>>>>> If you aren't able to build from trunk, let me know and I'll try to
>>>>> publish a snapshot build since I don't think we have a recent one (we
>>>>> should do this no matter what).
>>>>>
>>>>> -> richard
>>>>>
>>>>>
>>>>>
>>>>>   If a refresh is happening in another thread, the refresh will be
>>>>> holding
>>>>>
>>>>>> the framework's global lock, which will then call IPOJO's extender,
>>>>>> which
>>>>>> then attempts to call a method on InstanceCreator, hence leading to
>>>>>> the
>>>>>> deadlock.
>>>>>>
>>>>>> Here are the stack traces:
>>>>>>
>>>>>> Daemon Thread [Thread-1] (Suspended)
>>>>>> Object.wait(long) line: not available [native method]
>>>>>> Object[](Object).wait() line: 485
>>>>>> Felix.acquireBundleLock(******BundleImpl, int) line: 4871
>>>>>> Felix.registerService(******BundleImpl, String[], Object, Dictionary)
>>>>>> line:
>>>>>> 3205
>>>>>> BundleContextImpl.******registerService(String[], Object, Dictionary)
>>>>>> line:
>>>>>> 346
>>>>>>
>>>>>> IPojoContext.registerService(******String[], Object, Dictionary)
>>>>>> line:
>>>>>> 385
>>>>>> ProvidedService.******registerService() line: 362
>>>>>> ProvidedServiceHandler.__M_******stateChanged(int) line: 509
>>>>>> ProvidedServiceHandler.******stateChanged(int) line: not available
>>>>>>
>>>>>>
>>>>>> InstanceManager.setState(int) line: 536
>>>>>> InstanceManager.start() line: 418
>>>>>> ComponentFactory.******createInstance(Dictionary, IPojoContext,
>>>>>> HandlerManager[])
>>>>>> line: 179
>>>>>>
>>>>>> ComponentFactory(IPojoFactory)******.createComponentInstance(******
>>>>>> Dictionary,
>>>>>> ServiceContext) line: 310
>>>>>> ComponentFactory(IPojoFactory)******.createComponentInstance(******
>>>>>> Dictionary)
>>>>>> line: 239
>>>>>> InstanceCreator$******ManagedInstance.create(******IPojoFactory)
>>>>>> line: 355
>>>>>> InstanceCreator.addInstance(******Dictionary, long) line: 89
>>>>>> Extender.parse(Bundle, String) line: 306
>>>>>> Extender.startManagementFor(******Bundle) line: 237
>>>>>>
>>>>>>
>>>>>> Extender.access$600(Extender, Bundle) line: 52
>>>>>> Extender$CreatorThread.run() line: 769
>>>>>> Thread.run() line: 662
>>>>>>
>>>>>> Daemon Thread [FelixFrameworkWiring] (Suspended)
>>>>>> InstanceCreator.******removeInstancesFromBundle(******long) line: 116
>>>>>> Extender.closeManagementFor(******Bundle) line: 171
>>>>>> Extender.bundleChanged(******BundleEvent) line: 153
>>>>>> EventDispatcher.******invokeBundleListenerCallback(******Bundle,
>>>>>> EventListener,
>>>>>> EventObject) line: 868
>>>>>> EventDispatcher.******fireEventImmediately(******EventDispatcher,
>>>>>> int, Map,
>>>>>> EventObject, Dictionary) line: 789
>>>>>> EventDispatcher.******fireBundleEvent(BundleEvent, Framework) line:
>>>>>> 514
>>>>>>
>>>>>>
>>>>>> Felix.fireBundleEvent(int, Bundle) line: 4244
>>>>>> Felix.stopBundle(BundleImpl, boolean) line: 2351
>>>>>> Felix$RefreshHelper.stop() line: 4629
>>>>>> Felix.refreshPackages(******Collection, FrameworkListener[]) line:
>>>>>> 3951
>>>>>>
>>>>>>
>>>>>> FrameworkWiringImpl.run() line: 172
>>>>>> Thread.run() line: 662
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>

Re: IPOJO initialization + refresh deadlock

Posted by Jad Naous <ja...@nerati.com>.
To close the loop on this thread, I've created
FELIX-3839<https://issues.apache.org/jira/browse/FELIX-3839>


On Thu, Jan 3, 2013 at 2:26 AM, Bertrand Delacretaz
<bd...@apache.org>wrote:

> On Thu, Jan 3, 2013 at 10:19 AM, Jad Naous <ja...@nerati.com> wrote:
> > On Thu, Jan 3, 2013 at 12:55 AM, Bertrand Delacretaz <
> bdelacretaz@apache.org
> >>... I haven't studied your case in detail but you might want to compare
> >> with FELIX-3067...
>
> > Seems related. I'm guessing you are running into the deadlock because the
> > classloader tries to acquire the global lock while holding some
> application
> > lock?
>
> I cannot say for sure, haven't looked at that issue in a while. The
> SCR subsystem might have its own locks that contribute to exposing the
> deadlocks.
>
> >
> > I'm not familiar with the Sling Launchpad. Is this a maven repo somewhere
> > where I can get your patches?...
>
> You can build Sling and use its launchpad as described in FELIX-3067
> if you want, but the key part in reproducing the deadlocks is the
> stress tests [1] - I used Sling only as a provider of several bundles
> which use SCR services, as that helps expose the problem.
>
> -Bertrand
>
> [1] https://github.com/bdelacretaz/osgi-stresser
>

Re: IPOJO initialization + refresh deadlock

Posted by Bertrand Delacretaz <bd...@apache.org>.
On Thu, Jan 3, 2013 at 10:19 AM, Jad Naous <ja...@nerati.com> wrote:
> On Thu, Jan 3, 2013 at 12:55 AM, Bertrand Delacretaz <bdelacretaz@apache.org
>>... I haven't studied your case in detail but you might want to compare
>> with FELIX-3067...

> Seems related. I'm guessing you are running into the deadlock because the
> classloader tries to acquire the global lock while holding some application
> lock?

I cannot say for sure, haven't looked at that issue in a while. The
SCR subsystem might have its own locks that contribute to exposing the
deadlocks.

>
> I'm not familiar with the Sling Launchpad. Is this a maven repo somewhere
> where I can get your patches?...

You can build Sling and use its launchpad as described in FELIX-3067
if you want, but the key part in reproducing the deadlocks is the
stress tests [1] - I used Sling only as a provider of several bundles
which use SCR services, as that helps expose the problem.

-Bertrand

[1] https://github.com/bdelacretaz/osgi-stresser

Re: IPOJO initialization + refresh deadlock

Posted by Jad Naous <ja...@nerati.com>.
On Thu, Jan 3, 2013 at 12:55 AM, Bertrand Delacretaz <bdelacretaz@apache.org
> wrote:

> Hi,
>
> On Tue, Jan 1, 2013 at 12:09 PM, Jad Naous <ja...@nerati.com> wrote:
> > ...I'm running into another deadlock now. It seems like there needs to
> be a
> > more rigorous study of how locking is used in the framework. In
> particular,
> > it seems like the framework should not be invoking any listeners within
> the
> > same thread that's executing the stopping/starting/refreshing of
> bundles...
>
> I haven't studied your case in detail but you might want to compare
> with FELIX-3067 - it would be interesting to see if that's related to
> what you see.
>

Seems related. I'm guessing you are running into the deadlock because the
classloader tries to acquire the global lock while holding some application
lock?

I'm not familiar with the Sling Launchpad. Is this a maven repo somewhere
where I can get your patches?

Thanks,
Jad.

Re: IPOJO initialization + refresh deadlock

Posted by Bertrand Delacretaz <bd...@apache.org>.
Hi,

On Tue, Jan 1, 2013 at 12:09 PM, Jad Naous <ja...@nerati.com> wrote:
> ...I'm running into another deadlock now. It seems like there needs to be a
> more rigorous study of how locking is used in the framework. In particular,
> it seems like the framework should not be invoking any listeners within the
> same thread that's executing the stopping/starting/refreshing of bundles...

I haven't studied your case in detail but you might want to compare
with FELIX-3067 - it would be interesting to see if that's related to
what you see.

-Bertrand

Re: IPOJO initialization + refresh deadlock

Posted by "Richard S. Hall" <he...@ungoverned.org>.
On 1/1/13 23:42, Jad Naous wrote:
> On Tue, Jan 1, 2013 at 2:24 PM, Richard S. Hall <he...@ungoverned.org>wrote:
>
>> On 1/1/13 13:14, Jad Naous wrote:
>>
>>> On Tue, Jan 1, 2013 at 9:58 AM, Richard S. Hall <heavy@ungoverned.org
>>>> wrote:
>>>   On 1/1/13 12:40, Jad Naous wrote:
>>>>   On Tue, Jan 1, 2013 at 9:16 AM, Richard S. Hall <heavy@ungoverned.org
>>>>>> wrote:
>>>>>>
>>>>>    On 1/1/13 11:51, Jad Naous wrote:
>>>>>
>>>>>>    On Tue, Jan 1, 2013 at 8:30 AM, Richard S. Hall <
>>>>>> heavy@ungoverned.org
>>>>>>
>>>>>>> wrote:
>>>>>>>>      On 1/1/13 11:13, Jad Naous wrote:
>>>>>>>      On Tue, Jan 1, 2013 at 7:58 AM, Richard S. Hall <
>>>>>>>> heavy@ungoverned.org
>>>>>>>>
>>>>>>>>   wrote:
>>>>>>>>>>       On 1/1/13 10:37, Jad Naous wrote:
>>>>>>>>>>
>>>>>>>>>       On Tue, Jan 1, 2013 at 6:21 AM, Richard S. Hall<
>>>>>>>>>
>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>
>>>>>>>>>>   **
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>       On 1/1/13 06:09, Jad Naous wrote:
>>>>>>>>>>>
>>>>>>>>>>>        Happy new year!
>>>>>>>>>>>
>>>>>>>>>>>      I'm running into another deadlock now. It seems like there
>>>>>>>>>>>> needs
>>>>>>>>>>>> to
>>>>>>>>>>>>
>>>>>>>>>>>>   be a
>>>>>>>>>>>>> more rigorous study of how locking is used in the framework. In
>>>>>>>>>>>>> particular,
>>>>>>>>>>>>> it seems like the framework should not be invoking any listeners
>>>>>>>>>>>>> within
>>>>>>>>>>>>> the
>>>>>>>>>>>>> same thread that's executing the stopping/starting/refreshing of
>>>>>>>>>>>>> bundles...
>>>>>>>>>>>>> Anywhere that happens there will be a potential for a deadlock
>>>>>>>>>>>>> because
>>>>>>>>>>>>> of
>>>>>>>>>>>>> a
>>>>>>>>>>>>> misordering of lock acquisition. The framework should never call
>>>>>>>>>>>>> into
>>>>>>>>>>>>> user
>>>>>>>>>>>>> code with any locks held.
>>>>>>>>>>>>>
>>>>>>>>>>>>>       Yeah, tell me about it, but it is not possible in all
>>>>>>>>>>>>> cases,
>>>>>>>>>>>>>
>>>>>>>>>>>>>     unfortunately. I personally feel that all events should be
>>>>>>>>>>>>>
>>>>>>>>>>>>>   asynchronous,
>>>>>>>>>>>> but that's another story.
>>>>>>>>>>>>
>>>>>>>>>>>> -> richard
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>       I'm happy to help fix this, but I need some pointers as to
>>>>>>>>>>>> what
>>>>>>>>>>>> needs to
>>>>>>>>>>>>
>>>>>>>>>>>>     happen. For synchronous events, what are the requirements? Or
>>>>>>>>>>>> is
>>>>>>>>>>>>
>>>>>>>>>>>>   this
>>>>>>>>>>> not
>>>>>>>>>>> fixable? Can the lock be released before firing the events?
>>>>>>>>>>>
>>>>>>>>>>>      I don't think it can be fixed, some of these things are baked
>>>>>>>>>>> into
>>>>>>>>>>> the
>>>>>>>>>>>
>>>>>>>>>>>    spec. I think the spec even states somewhere that synchronous
>>>>>>>>>>> event
>>>>>>>>>>>
>>>>>>>>>> listeners must be careful since they may be holding framework
>>>>>>>>>> locks,
>>>>>>>>>> so
>>>>>>>>>> they shouldn't try to do too much. Of course, that is not easy
>>>>>>>>>> advice
>>>>>>>>>> to
>>>>>>>>>> follow since framework impls vary.
>>>>>>>>>>
>>>>>>>>>> We even have bugs open that say we aren't holding locks when we
>>>>>>>>>> should
>>>>>>>>>> be,
>>>>>>>>>> e.g.:
>>>>>>>>>>
>>>>>>>>>>          https://issues.apache.org/**********jira/browse/FELIX-3806<https://issues.apache.org/********jira/browse/FELIX-3806>
>>>>>>>>>> <htt**ps://issues.apache.org/********jira/browse/FELIX-3806<https://issues.apache.org/******jira/browse/FELIX-3806>
>>>>>>>>>> <https**://issues.apache.org/******jira/**browse/FELIX-3806<http://issues.apache.org/****jira/**browse/FELIX-3806>
>>>>>>>>>> <ht**tps://issues.apache.org/******jira/browse/FELIX-3806<https://issues.apache.org/****jira/browse/FELIX-3806>
>>>>>>>>>> <https:/**/issues.apache.org/******jira/**browse/FELIX-3806<http://issues.apache.org/****jira/**browse/FELIX-3806>
>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3806<http://issues.apache.org/**jira/**browse/FELIX-3806>
>>>>>>>>>> <http**s://issues.apache.org/****jira/**browse/FELIX-3806<http://issues.apache.org/**jira/**browse/FELIX-3806>
>>>>>>>>>> <http**s://issues.apache.org/**jira/**browse/FELIX-3806<https://issues.apache.org/**jira/browse/FELIX-3806>
>>>>>>>>>> <https:/**/issues.apache.org/******jira/**browse/FELIX-3806<http://issues.apache.org/****jira/**browse/FELIX-3806>
>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3806<http://issues.apache.org/**jira/**browse/FELIX-3806>
>>>>>>>>>> <http**://issues.apache.org/**jira/****browse/FELIX-3806<http://issues.apache.org/jira/****browse/FELIX-3806>
>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3806<http://issues.apache.org/jira/**browse/FELIX-3806>
>>>>>>>>>> <https**://issues.apache.org/****jira/**browse/FELIX-3806<http://issues.apache.org/**jira/**browse/FELIX-3806>
>>>>>>>>>> <http**://issues.apache.org/jira/****browse/FELIX-3806<http://issues.apache.org/jira/**browse/FELIX-3806>
>>>>>>>>>> <https**://issues.apache.org/**jira/**browse/FELIX-3806<http://issues.apache.org/jira/**browse/FELIX-3806>
>>>>>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3806<https://issues.apache.org/jira/browse/FELIX-3806>
>>>>>>>>>> This is one of the poorly designed parts of the OSGi spec. It was
>>>>>>>>>> meant
>>>>>>>>>> to
>>>>>>>>>> work in a world were services can "come and go at anytime", but it
>>>>>>>>>> allows
>>>>>>>>>> users to clings to synchronous events to do tons of work.
>>>>>>>>>>
>>>>>>>>>>      Then I guess this is something that ipojo is doing incorrectly?
>>>>>>>>>>
>>>>>>>>>>    Hard for me to say, but if there is a case where we can fire
>>>>>>>>>> events
>>>>>>>>>>
>>>>>>>>> without holding locks, then you are correct in saying that we should
>>>>>>>> try
>>>>>>>> to
>>>>>>>> avoid doing so. Likewise, users should avoid doing too much when they
>>>>>>>> receive synchronous events.
>>>>>>>>
>>>>>>>>     Well, iPOJO is not doing anything. It is just loading a class, and
>>>>>>>>
>>>>>>>>   that's
>>>>>>> what's causing the global lock to be acquired.
>>>>>>>
>>>>>>>    You're really going to make me look into this, aren't you? ;-)
>>>>>>>
>>>>>>    :) Thanks from me and the tons of other people using this framework!
>>>>>>
>>>>>    I'm not sure what is going on, but for whatever reason you are in the
>>>>>
>>>>>> middle of a refresh (which requires global lock) while it appears that
>>>>>> iPOJO is starting to manage a new bundle, which ultimately results in
>>>>>> someone trying to do a dynamic import (which also requires global
>>>>>> lock).
>>>>>>
>>>>>> There isn't much we can do in this case other than try to detect it and
>>>>>> fail for the global lock acquire...
>>>>>>
>>>>>>    And ipojo will have to deal... Seems simpler if ipojo didn't try to
>>>>>>
>>>>> unregister services or do that sort of thing (or at least not acquire
>>>>> any
>>>>> locks of its own) synchronously.
>>>>>
>>>>>   iPOJO doesn't appear to be doing anything synchronously here. It looks
>>>> like it is working on another thread to start management of a perhaps
>>>> newly
>>>> installed or updated bundle. The issue actually arises because the
>>>> framework instigates a dynamic import when trying to determine if it
>>>> should
>>>> deliver the event to a service listener (it needs to try to load classes
>>>> in
>>>> some cases to see if the service's class is compatible with the
>>>> listener's
>>>> service class).
>>>>
>>>> This is really ugly. Not really sure what we could do here other than
>>>> always fail service event delivery if the listener bundle doesn't already
>>>> have access to the service class. But that would still be complicated to
>>>> do
>>>> and would lead to other failure scenarios.
>>>>
>>>> I'd have to think about that one.
>>>>
>>>>
>>>>   That's in one thread. In the other, the framework calls stopBundle() and
>>> ipojo is reacting to that be calling InstanceCreator.removeFactory(**),
>>> and
>>> this is the guy that grabs the other lock. If ipojo instead either doesn't
>>> grab the lock or pushes the work somewhere else, this ugly mess goes
>>> away...
>>>
>> Well, the strange thing for me is that iPOJO is trying start managing the
>> same bundle that the framework is trying to stop, effectively iPOJO is
>> trying to start and stop managing the same bundle.
>>
>> In this case, you are correct in that iPOJO should also not hold its own
>> locks while calling into the framework, since that resulted in a callback
>> into iPOJO for the same lock, but on a different thread.
>>
>>
> Do you know if Clement ever responds to emails on this mailing list or
> somewhere else?

He responds on this list regularly, but it is the holidays right now.

-> richard

>
> Jad.
>
>
>> -> richard
>>
>>
>>>   -> richard
>>>>
>>>>     -> richard
>>>>>>      -> richard
>>>>>>
>>>>>>>       -> richard
>>>>>>>>         Name: Thread-2
>>>>>>>>>>    State: WAITING on [Ljava.lang.Object;@4a018e1b
>>>>>>>>>>
>>>>>>>>>>> Total blocked: 38,871,649  Total waited: 38,871,650
>>>>>>>>>>>>> Stack trace:
>>>>>>>>>>>>>         java.lang.Object.wait(Native Method)
>>>>>>>>>>>>> java.lang.Object.wait(Object.************java:485)
>>>>>>>>>>>>> org.apache.felix.framework.************Felix.**
>>>>>>>>>>>>> acquireGlobalLock(***
>>>>>>>>>>>>> ***
>>>>>>>>>>>>> Felix.**
>>>>>>>>>>>>> **java:5033)
>>>>>>>>>>>>> org.apache.felix.framework.************StatefulResolver.**
>>>>>>>>>>>>> resolve(**
>>>>>>>>>>>>> **
>>>>>>>>>>>>> StatefulResolver.java:451)
>>>>>>>>>>>>> org.apache.felix.framework.************BundleWiringImpl.****
>>>>>>>>>>>>> searchDynamicImports(**
>>>>>>>>>>>>> BundleWiringImpl.java:1578)
>>>>>>>>>>>>> org.apache.felix.framework.************BundleWiringImpl.**
>>>>>>>>>>>>> findClassOrResourceByDelegatio************n(BundleWiringImpl.**
>>>>>>>>>>>>> **
>>>>>>>>>>>>> java:**
>>>>>>>>>>>>> ****1478)
>>>>>>>>>>>>> org.apache.felix.framework.************BundleWiringImpl.**
>>>>>>>>>>>>> access$****
>>>>>>>>>>>>> 400(****
>>>>>>>>>>>>> BundleWiringImpl.java:75)
>>>>>>>>>>>>> org.apache.felix.framework.************BundleWiringImpl$**
>>>>>>>>>>>>> BundleClassLoader.loadClass(************BundleWiringImpl.java:*
>>>>>>>>>>>>> *****
>>>>>>>>>>>>> 1882)
>>>>>>>>>>>>> java.lang.ClassLoader.************loadClass(ClassLoader.java:**
>>>>>>>>>>>>> *****
>>>>>>>>>>>>> **
>>>>>>>>>>>>> ***247)
>>>>>>>>>>>>> org.apache.felix.framework.************BundleWiringImpl.****
>>>>>>>>>>>>> getClassByDelegation(**
>>>>>>>>>>>>> BundleWiringImpl.java:1356)
>>>>>>>>>>>>> org.apache.felix.framework.**************
>>>>>>>>>>>>> ServiceRegistrationImpl$****
>>>>>>>>>>>>> ServiceReferenceImpl.************isAssignableTo(****
>>>>>>>>>>>>> ServiceRegistrationImpl.java:************
>>>>>>>>>>>>> 548)
>>>>>>>>>>>>> org.apache.felix.framework.************util.Util.****
>>>>>>>>>>>>> isServiceAssignable(****
>>>>>>>>>>>>> Util.java:280)
>>>>>>>>>>>>> org.apache.felix.framework.************util.EventDispatcher.**
>>>>>>>>>>>>> invokeServiceListenerCallback(************EventDispatcher.**
>>>>>>>>>>>>> java:***
>>>>>>>>>>>>> *916)
>>>>>>>>>>>>> org.apache.felix.framework.************util.EventDispatcher.***
>>>>>>>>>>>>> ***
>>>>>>>>>>>>> fireEventImmediately(
>>>>>>>>>>>>> **EventDispatcher.java:793)
>>>>>>>>>>>>> org.apache.felix.framework.************util.EventDispatcher.***
>>>>>>>>>>>>> ***
>>>>>>>>>>>>> fireServiceEvent(**
>>>>>>>>>>>>> EventDispatcher.java:543)
>>>>>>>>>>>>> org.apache.felix.framework.************Felix.fireServiceEvent(*
>>>>>>>>>>>>> ***
>>>>>>>>>>>>> Felix.*****
>>>>>>>>>>>>> *java:4346)
>>>>>>>>>>>>> org.apache.felix.framework.************Felix.registerService(**
>>>>>>>>>>>>> **
>>>>>>>>>>>>> Felix.******
>>>>>>>>>>>>> java:3356)
>>>>>>>>>>>>> org.apache.felix.framework.************BundleContextImpl.******
>>>>>>>>>>>>> **
>>>>>>>>>>>>> registerService(**
>>>>>>>>>>>>> BundleContextImpl.java:346)
>>>>>>>>>>>>> org.apache.felix.ipojo.************IPojoFactory.start(****
>>>>>>>>>>>>> IPojoFactory.java:613)
>>>>>>>>>>>>>           - locked org.apache.felix.ipojo.************
>>>>>>>>>>>>> ComponentFactory@468034b6
>>>>>>>>>>>>> org.apache.felix.ipojo.************Extender.********
>>>>>>>>>>>>> createAbstractFactory(**
>>>>>>>>>>>>> Extender.java:520)
>>>>>>>>>>>>> org.apache.felix.ipojo.************Extender.parse(Extender.**
>>>>>>>>>>>>> java:**
>>>>>>>>>>>>> ***
>>>>>>>>>>>>> *****301)
>>>>>>>>>>>>> org.apache.felix.ipojo.************Extender.**
>>>>>>>>>>>>> startManagementFor(***
>>>>>>>>>>>>> *******
>>>>>>>>>>>>> Extender.java:237)
>>>>>>>>>>>>> org.apache.felix.ipojo.************Extender.access$600(**
>>>>>>>>>>>>> Extender.**
>>>>>>>>>>>>> *****
>>>>>>>>>>>>> ***java:52)
>>>>>>>>>>>>> org.apache.felix.ipojo.************Extender$CreatorThread.run(*
>>>>>>>>>>>>> *****
>>>>>>>>>>>>> ******
>>>>>>>>>>>>> Extender.java:769)
>>>>>>>>>>>>> java.lang.Thread.run(Thread.************java:662)
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Name: FelixFrameworkWiring
>>>>>>>>>>>>> State: BLOCKED on org.apache.felix.ipojo.****
>>>>>>>>>>>>>
>>>>>>>>>>>>> ComponentFactory@468034b6owned
>>>>>>>>>>>>>
>>>>>>>>>>>>> by: Thread-2
>>>>>>>>>>>>> Total blocked: 7  Total waited: 1
>>>>>>>>>>>>>
>>>>>>>>>>>>> Stack trace:
>>>>>>>>>>>>>         org.apache.felix.ipojo.************IPojoFactory.****
>>>>>>>>>>>>> removeFactoryStateListener(**
>>>>>>>>>>>>> IPojoFactory.java:511)
>>>>>>>>>>>>> org.apache.felix.ipojo.************InstanceCreator.**
>>>>>>>>>>>>> removeFactory(**
>>>>>>>>>>>>> ******
>>>>>>>>>>>>> InstanceCreator.java:199)
>>>>>>>>>>>>> org.apache.felix.ipojo.************Extender.**
>>>>>>>>>>>>> closeManagementFor(***
>>>>>>>>>>>>> *******
>>>>>>>>>>>>> Extender.java:180)
>>>>>>>>>>>>> org.apache.felix.ipojo.************Extender.bundleChanged(****
>>>>>>>>>>>>> Extender.java:153)
>>>>>>>>>>>>> org.apache.felix.framework.************util.EventDispatcher.**
>>>>>>>>>>>>> invokeBundleListenerCallback(************EventDispatcher.java:*
>>>>>>>>>>>>> ***
>>>>>>>>>>>>> 868)
>>>>>>>>>>>>> org.apache.felix.framework.************util.EventDispatcher.***
>>>>>>>>>>>>> ***
>>>>>>>>>>>>> fireEventImmediately(
>>>>>>>>>>>>> **EventDispatcher.java:789)
>>>>>>>>>>>>> org.apache.felix.framework.************util.EventDispatcher.***
>>>>>>>>>>>>> ***
>>>>>>>>>>>>> fireBundleEvent(**
>>>>>>>>>>>>> EventDispatcher.java:514)
>>>>>>>>>>>>> org.apache.felix.framework.************Felix.fireBundleEvent(**
>>>>>>>>>>>>> **
>>>>>>>>>>>>> Felix.******
>>>>>>>>>>>>> java:4330)
>>>>>>>>>>>>> org.apache.felix.framework.************Felix.stopBundle(Felix.*
>>>>>>>>>>>>> ***
>>>>>>>>>>>>> java:***
>>>>>>>>>>>>> ***2451)
>>>>>>>>>>>>> org.apache.felix.framework.************Felix$RefreshHelper.**
>>>>>>>>>>>>> stop(**
>>>>>>>>>>>>> ******
>>>>>>>>>>>>> Felix.java:4715)
>>>>>>>>>>>>> org.apache.felix.framework.************Felix.refreshPackages(**
>>>>>>>>>>>>> **
>>>>>>>>>>>>> Felix.******
>>>>>>>>>>>>> java:4037)
>>>>>>>>>>>>> org.apache.felix.framework.************FrameworkWiringImpl.**
>>>>>>>>>>>>> run(****
>>>>>>>>>>>>> FrameworkWiringImpl.java:178)
>>>>>>>>>>>>> java.lang.Thread.run(Thread.************java:662)
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Sat, Dec 22, 2012 at 6:39 PM, Richard S. Hall <
>>>>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>>>>
>>>>>>>>>>>>>      wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>          On 12/22/12 20:41 , Jad Naous wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>>          Thanks! I was building with java6. Don't know if that
>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>
>>>>>>>>>>>>> the
>>>>>>>>>>>>>
>>>>>>>>>>>>>    issue.
>>>>>>>>>>>>>
>>>>>>>>>>>>>>      Anyway,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>    I tested the snapshot, and looks like that fixes it.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Any idea when 4.1.0 will be released? Do you know if
>>>>>>>>>>>>>>> http://svn.apache.org/viewvc?**************view=revision&**<http://svn.apache.org/viewvc?************view=revision&**>
>>>>>>>>>>>>>>> revision=**<http://svn.apache.**org/viewvc?**********view=**
>>>>>>>>>>>>>>> revision&revision=**<http://svn.apache.org/viewvc?**********view=revision&revision=**>
>>>>>>>>>>>>>>> ****<http://svn.apache.org/****viewvc?********view=revision&*
>>>>>>>>>>>>>>> *** <http://svn.apache.org/**viewvc?********view=revision&**>
>>>>>>>>>>>>>>> revision=****<http://svn.**apache.org/viewvc?**********
>>>>>>>>>>>>>>> view=revision&revision=****<http://svn.apache.org/viewvc?********view=revision&revision=****>
>>>>>>>>>>>>>>> **1421958<http://svn.apache.******org/viewvc?******view=**
>>>>>>>>>>>>>>> revision&revision=****1421958<****http://svn.apache.org/**
>>>>>>>>>>>>>>> viewvc?** <http://svn.apache.org/viewvc?**>
>>>>>>>>>>>>>>> ******view=revision&revision=********1421958<http://svn.**
>>>>>>>>>>>>>>> apache.org/viewvc?******view=**revision&revision=****1421958<http://svn.apache.org/viewvc?******view=revision&revision=****1421958>
>>>>>>>>>>>>>>> <http://svn.apache.**org/******viewvc?****view=revision&**
>>>>>>>>>>>>>>> revision=**1421958<http://svn.******apache.org/viewvc?******
>>>>>>>>>>>>>>> view=** <http://apache.org/viewvc?****view=**>
>>>>>>>>>>>>>>> ** <http://apache.org/viewvc?******view=**<http://apache.org/viewvc?****view=**>
>>>>>>>>>>>>>>> revision&revision=**1421958<**ht**tp://svn.apache.org/**
>>>>>>>>>>>>>>> viewvc?**** <http://svn.apache.org/viewvc?****>
>>>>>>>>>>>>>>> **view=revision&revision=******1421958<http://svn.apache.org/
>>>>>>>>>>>>>>> **viewvc?****view=revision&**revision=**1421958<http://svn.apache.org/viewvc?****view=revision&revision=**1421958>
>>>>>>>>>>>>>>> <http://svn.apache.org/**********viewvc?**view=revision&****<http://svn.apache.org/********viewvc?**view=revision&****>
>>>>>>>>>>>>>>> <h**ttp://svn.apache.org/********viewvc?**view=revision&****<http://svn.apache.org/******viewvc?**view=revision&****>
>>>>>>>>>>>>>>> <ht**tp://svn.apache.org/********viewvc?**view=revision&****<http://svn.apache.org/******viewvc?**view=revision&****>
>>>>>>>>>>>>>>> <h**ttp://svn.apache.org/******viewvc?**view=revision&****<http://svn.apache.org/****viewvc?**view=revision&****>
>>>>>>>>>>>>>>> revision=1421958<http://svn.******
>>>>>>>>>>>>>>> apache.org/**viewvc?**view=****<http://apache.org/**viewvc?**view=**>
>>>>>>>>>>>>>>> <http://apache.org/**viewvc?****view=**<http://apache.org/**viewvc?**view=**>
>>>>>>>>>>>>>>> revision&**revision=1421958<**ht**tp://svn.apache.org/****
>>>>>>>>>>>>>>> viewvc?** <http://svn.apache.org/**viewvc?**>
>>>>>>>>>>>>>>> **view=revision&**revision=****1421958<http://svn.apache.org/
>>>>>>>>>>>>>>> ****viewvc?**view=revision&****revision=1421958<http://svn.apache.org/**viewvc?**view=revision&**revision=1421958>
>>>>>>>>>>>>>>> <http://svn.**apache.org/******viewvc?**view=**revision&**<http://apache.org/****viewvc?**view=**revision&**>
>>>>>>>>>>>>>>> <ht**tp://apache.org/**viewvc?****view=**revision&**<http://apache.org/**viewvc?**view=**revision&**>
>>>>>>>>>>>>>>> revision=1421958<http://**apac**he.org/viewvc?**view=****<http://apache.org/viewvc?**view=****>
>>>>>>>>>>>>>>> revision&revision=1421958<http**
>>>>>>>>>>>>>>> ://apache.org/viewvc?**view=****revision&revision=1421958<http://apache.org/viewvc?**view=**revision&revision=1421958>
>>>>>>>>>>>>>>> <http://svn.**apache.org/****viewvc?**view=**<http://apache.org/**viewvc?**view=**>
>>>>>>>>>>>>>>> <http://**apache.org/viewvc?**view=**<http://apache.org/viewvc?**view=**>
>>>>>>>>>>>>>>> revision&revision=1421958<**http**://svn.apache.org/**
>>>>>>>>>>>>>>> viewvc?**** <http://svn.apache.org/viewvc?****>
>>>>>>>>>>>>>>> view=revision&revision=**1421958<http://svn.apache.org/**
>>>>>>>>>>>>>>> viewvc?**view=revision&**revision=1421958<http://svn.apache.org/viewvc?**view=revision&revision=1421958>
>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>> <http://svn.apache.org/************viewvc?view=revision&**<http://svn.apache.org/**********viewvc?view=revision&**>
>>>>>>>>>>>>>>> revision=****<http://svn.**apache.org/********viewvc?**
>>>>>>>>>>>>>>> view=revision&revision=****<http://svn.apache.org/********viewvc?view=revision&revision=****>
>>>>>>>>>>>>>>> <http://svn.**apache.org/********viewvc?view=**<http://apache.org/******viewvc?view=**>
>>>>>>>>>>>>>>> revision&revision=**<http://**svn.apache.org/******viewvc?**
>>>>>>>>>>>>>>> view=revision&revision=**<http://svn.apache.org/******viewvc?view=revision&revision=**>
>>>>>>>>>>>>>>> ****1421958<http://svn.apache.******org/****viewvc?view=**
>>>>>>>>>>>>>>> revision&**
>>>>>>>>>>>>>>> revision=****1421958<http://****svn.apache.org/****viewvc?**<http://svn.apache.org/****viewvc?**>
>>>>>>>>>>>>>>> view=revision&revision=********1421958<http://svn.apache.org/
>>>>>>>>>>>>>>> ******viewvc?view=revision&**revision=****1421958<http://svn.apache.org/****viewvc?view=revision&revision=****1421958>
>>>>>>>>>>>>>>> <http://svn.apache.**org/********viewvc?view=revision&**
>>>>>>>>>>>>>>> revision=**1421958<http://svn.******
>>>>>>>>>>>>>>> apache.org/**viewvc?view=****<http://apache.org/**viewvc?view=**>
>>>>>>>>>>>>>>> revision&revision=**1421958<**ht**tp://svn.apache.org/****
>>>>>>>>>>>>>>> viewvc?** <http://svn.apache.org/**viewvc?**>
>>>>>>>>>>>>>>> view=revision&revision=******1421958<http://svn.apache.org/**
>>>>>>>>>>>>>>> **viewvc?view=revision&**revision=**1421958<http://svn.apache.org/**viewvc?view=revision&revision=**1421958>
>>>>>>>>>>>>>>> <http://svn.apache.**org/********viewvc?view=revision&****
>>>>>>>>>>>>>>> revision=1421958<http://svn.********apache.org/viewvc?view=**
>>>>>>>>>>>>>>> <**ht*
>>>>>>>>>>>>>>> *tp://apache.org/viewvc?view=****<http://apache.org/viewvc?view=**>
>>>>>>>>>>>>>>> <http://apache.org/viewvc?**view=**<http://apache.org/viewvc?view=**>
>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>> revision&revision=1421958<****http**://svn.apache.org/**
>>>>>>>>>>>>>>> viewvc?view=** <http://svn.apache.org/viewvc?**view=**<http://svn.apache.org/viewvc?view=**>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> revision&revision=1421958<**http**://svn.apache.org/**
>>>>>>>>>>>>>>> viewvc?view=* <http://svn.apache.org/viewvc?view=*>
>>>>>>>>>>>>>>> *revision&revision=1421958<htt**p://svn.apache.org/viewvc?**
>>>>>>>>>>>>>>> view=revision&revision=1421958<http://svn.apache.org/viewvc?view=revision&revision=1421958>
>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>      will
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>    apply
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>    cleanly onto 4.0.3? Otherwise, how stable do you think is
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 4.1.0-SNAPSHOT?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>        The release version will be 4.2.0, but the
>>>>>>>>>>>>>>> 4.1.0-SNAPSHOT
>>>>>>>>>>>>>>> build
>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>      be
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>    reasonably stable. We try to keep trunk stable.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I want to try to get a release out soon, but I don't have a
>>>>>>>>>>>>>> specific
>>>>>>>>>>>>>> time
>>>>>>>>>>>>>> table. I'll try to get in done in January if all goes well.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -> richard
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>        Thanks!
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>      Jad.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>   On Fri, Dec 21, 2012 at 6:49 AM, Richard S. Hall <
>>>>>>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>       wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>           It built fine for me. I'm was building with Java 7.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>         Regardless, I deployed snapshots of framework, main,
>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>      main.distribution, so just grab what you want from the
>>>>>>>>>>>>>>> Apache
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>   snapshot
>>>>>>>>>>>>>>>> repo
>>>>>>>>>>>>>>>> to try it out.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> -> richard
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On 12/20/12 18:56 , Jad Naous wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>         It does look like the same issue.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>       Got the trunk/framework. mvn clean install gives:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>     [INFO] --- maven-compiler-plugin:2.3.2:****
>>>>>>>>>>>>>>>> ************compile
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> (default-compile) @
>>>>>>>>>>>>>>>>> org.apache.felix.framework ---
>>>>>>>>>>>>>>>>> Dec 20, 2012 3:54:59 PM org.sonatype.guice.bean.****
>>>>>>>>>>>>>>>>> reflect.Logs$JULSink
>>>>>>>>>>>>>>>>> warn
>>>>>>>>>>>>>>>>> WARNING: Error injecting: org.apache.maven.plugin.********
>>>>>>>>>>>>>>>>> **
>>>>>>>>>>>>>>>>> ******
>>>>>>>>>>>>>>>>> CompilerMojo
>>>>>>>>>>>>>>>>> java.lang.****************NoClassDefFoundError:
>>>>>>>>>>>>>>>>> org/codehaus/plexus/compiler/***
>>>>>>>>>>>>>>>>> *************util/scan/******
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> InclusionScanException
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>> jad.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Thu, Dec 20, 2012 at 3:22 PM, Richard S. Hall <
>>>>>>>>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>        wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>            On 12/20/12 4:10 PM, Jad Naous wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>             If a bundle undergoes a refresh while ipojo is
>>>>>>>>>>>>>>>>> still
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>    initializing
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>         components, a deadlock can happen.  The issue is
>>>>>>>>>>>>>>>>> that if
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>    ipojo is
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>      attempting to register a service, it will be doing it
>>>>>>>>>>>>>>>>>> while
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>    synchronizing
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> on the InstanceCreator instance. It will then try to
>>>>>>>>>>>>>>>>>>> register
>>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>> service
>>>>>>>>>>>>>>>>>>> which requires the framework's global lock.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>          Registering a service doesn't require a global,
>>>>>>>>>>>>>>>>>>> just
>>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>> bundle
>>>>>>>>>>>>>>>>>>> lock.
>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>        think this could be related to:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>               https://issues.apache.org/************<https://issues.apache.org/**********>
>>>>>>>>>>>>>>>>>>> <https://issues.apache.**org/********<https://issues.apache.org/********>
>>>>>>>>>>>>>>>>>>> <https://issues.apache.**org/********<
>>>>>>>>>>>>>>>>>>> https://issues.apache.**org/******<https://issues.apache.org/******>
>>>>>>>>>>>>>>>>>>>    ******jira/browse/FELIX-3761<****h**ttps://
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> issues.apache.org/******* <http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> * <http://issues.apache.org/*****>>
>>>>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<****
>>>>>>>>>>>>>>>>>> https://issues.apache.org/******
>>>>>>>>>>>>>>>>>> ********jira/browse/FELIX-3761<https://issues.apache.org/************jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<https://issues.apache.org/*****
>>>>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<https://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttps://issues.apache.org/*****<http://issues.apache.org/***>
>>>>>>>>>>>>>>>>>> ***********jira/browse/FELIX-******<
>>>>>>>>>>>>>>>>>> http://issues.apache.org/**************jira/browse/FELIX-*
>>>>>>>>>>>>>>>>>> ***<http://issues.apache.org/************jira/browse/FELIX-**>
>>>>>>>>>>>>>>>>>> 3761<http://issues.apache.org/**
>>>>>>>>>>>>>>>>>> ************jira/browse/FELIX-<http://issues.apache.org/************jira/browse/FELIX->
>>>>>>>>>>>>>>>>>> **3761<http://issues.apache.**org/**********jira/browse/**
>>>>>>>>>>>>>>>>>> FELIX-3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <https://issues.apache.**org/***
>>>>>>>>>>>>>>>>>> *********jira/browse/FELIX-***
>>>>>>>>>>>>>>>>>> *3761<https://issues.apache.****
>>>>>>>>>>>>>>>>>> org/********jira/browse/FELIX-
>>>>>>>>>>>>>>>>>> **3761<https://issues.apache.**
>>>>>>>>>>>>>>>>>> org/********jira/browse/FELIX-**3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**ps://issues.apache.org/*****<http://issues.apache.org/***>
>>>>>>>>>>>>>>>>>> ***********jira/browse/FELIX-******<
>>>>>>>>>>>>>>>>>> http://issues.apache.org/**************jira/browse/FELIX-*
>>>>>>>>>>>>>>>>>> ***<http://issues.apache.org/************jira/browse/FELIX-**>
>>>>>>>>>>>>>>>>>> 3761<http://issues.apache.org/**
>>>>>>>>>>>>>>>>>> ************jira/browse/FELIX-<http://issues.apache.org/************jira/browse/FELIX->
>>>>>>>>>>>>>>>>>> **3761<http://issues.apache.**org/**********jira/browse/**
>>>>>>>>>>>>>>>>>> FELIX-3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> ********jira/browse/FELIX-3761<http://issues.apache.org/************jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> ******jira/browse/FELIX-3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ********jira/browse/FELIX-3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> ****jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>>>> <**https://issues.apache.org/***
>>>>>>>>>>>>>>>>>> ***********jira/browse/FELIX-*<https://issues.apache.org/************jira/browse/FELIX-*>
>>>>>>>>>>>>>>>>>> *3761<https://issues.apache.**org/**********jira/browse/**
>>>>>>>>>>>>>>>>>> FELIX-3761<https://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <https://issues.apache.**org/***
>>>>>>>>>>>>>>>>>> *******jira/browse/FELIX-**
>>>>>>>>>>>>>>>>>> 3761<https://issues.apache.**
>>>>>>>>>>>>>>>>>> org/********jira/browse/FELIX-**3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <**https://issues.apache.org/*****<https://issues.apache.org/***>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<**
>>>>>>>>>>>>>>>>>> https://issues.apache.org/**********jira/browse/FELIX-3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <**https://issues.apache.org/***
>>>>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <**https://issues.apache.org/******
>>>>>>>>>>>>>>>>>> **jira/browse/FELIX-3761<https://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <https**://issues.apache.org/*****<http://issues.apache.org/***>
>>>>>>>>>>>>>>>>>> *********jira/**browse/FELIX-******<
>>>>>>>>>>>>>>>>>> http://issues.apache.org/************jira/**browse/FELIX-*
>>>>>>>>>>>>>>>>>> ***<http://issues.apache.org/**********jira/**browse/FELIX-**>
>>>>>>>>>>>>>>>>>> 3761<http://issues.apache.org/**
>>>>>>>>>>>>>>>>>> **********jira/**browse/FELIX-<http://issues.apache.org/**********jira/**browse/FELIX->
>>>>>>>>>>>>>>>>>> **3761<http://issues.apache.**org/********jira/**browse/**
>>>>>>>>>>>>>>>>>> FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/**********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>>>> <**http://issues.apache.org/******<http://issues.apache.org/****>
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-**3761<http://issues.apache.org/
>>>>>>>>>>>>>>>>>> **********jira/**browse/FELIX-**3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/***
>>>>>>>>>>>>>>>>>> ***********jira/browse/FELIX-*<http://issues.apache.org/************jira/browse/FELIX-*>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> *3761<http://issues.apache.**org/**********jira/browse/**
>>>>>>>>>>>>>>>>>> FELIX-3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> ******jira/browse/FELIX-3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********
>>>>>>>>>>>>>>>>>> **jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ********jira/browse/FELIX-3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> ****jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ******jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/*****<http://issues.apache.org/***>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<**
>>>>>>>>>>>>>>>>>> http://issues.apache.org/**********jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ******jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/***
>>>>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <**http://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/***
>>>>>>>>>>>>>>>>>> *****jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/******jira/browse/FELIX-3761<https://issues.apache.org/****jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <https:/**/issues.apache.org/*****<http://issues.apache.org/***>
>>>>>>>>>>>>>>>>>> *********jira/**browse/FELIX-******<
>>>>>>>>>>>>>>>>>> http://issues.apache.org/************jira/**browse/FELIX-*
>>>>>>>>>>>>>>>>>> ***<http://issues.apache.org/**********jira/**browse/FELIX-**>
>>>>>>>>>>>>>>>>>> 3761<http://issues.apache.org/**
>>>>>>>>>>>>>>>>>> **********jira/**browse/FELIX-<http://issues.apache.org/**********jira/**browse/FELIX->
>>>>>>>>>>>>>>>>>> **3761<http://issues.apache.**org/********jira/**browse/**
>>>>>>>>>>>>>>>>>> FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/**********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>>>> <**http://issues.apache.org/******<http://issues.apache.org/****>
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-**3761<http://issues.apache.org/
>>>>>>>>>>>>>>>>>> **********jira/**browse/FELIX-**3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/******<http://issues.apache.org/****>
>>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-**3761<http://issues.apache.org/
>>>>>>>>>>>>>>>>>> ********jira/****browse/FELIX-**3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http**s://issues.apache.org/***
>>>>>>>>>>>>>>>>>> *********jira/**browse/FELIX-*<http://issues.apache.org/**********jira/**browse/FELIX-*>
>>>>>>>>>>>>>>>>>> *3761<http://issues.apache.**org/********jira/**browse/**
>>>>>>>>>>>>>>>>>> FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********
>>>>>>>>>>>>>>>>>> jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http**s://issues.apache.org/*****<http://issues.apache.org/***>
>>>>>>>>>>>>>>>>>> *****jira/**browse/FELIX-3761<**
>>>>>>>>>>>>>>>>>> http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http**s://issues.apache.org/***
>>>>>>>>>>>>>>>>>> *****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http**s://issues.apache.org/***
>>>>>>>>>>>>>>>>>> ***jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http**s://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http**s://issues.apache.org/**jira/**browse/FELIX-3761<https://issues.apache.org/**jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <https:/**/issues.apache.org/*****<http://issues.apache.org/***>
>>>>>>>>>>>>>>>>>> *********jira/**browse/FELIX-******<
>>>>>>>>>>>>>>>>>> http://issues.apache.org/************jira/**browse/FELIX-*
>>>>>>>>>>>>>>>>>> ***<http://issues.apache.org/**********jira/**browse/FELIX-**>
>>>>>>>>>>>>>>>>>> 3761<http://issues.apache.org/**
>>>>>>>>>>>>>>>>>> **********jira/**browse/FELIX-<http://issues.apache.org/**********jira/**browse/FELIX->
>>>>>>>>>>>>>>>>>> **3761<http://issues.apache.**org/********jira/**browse/**
>>>>>>>>>>>>>>>>>> FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/**********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>>>> <**http://issues.apache.org/******<http://issues.apache.org/****>
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-**3761<http://issues.apache.org/
>>>>>>>>>>>>>>>>>> **********jira/**browse/FELIX-**3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/******<http://issues.apache.org/****>
>>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-**3761<http://issues.apache.org/
>>>>>>>>>>>>>>>>>> ********jira/****browse/FELIX-**3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http**://issues.apache.org/******<http://issues.apache.org/****>
>>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-**3761<http://issues.apache.org/
>>>>>>>>>>>>>>>>>> ********jira/****browse/FELIX-**3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/******browse/FELIX-3761<http://issues.apache.org/****jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/****
>>>>>>>>>>>>>>>>>> jira/******browse/FELIX-3761<http://issues.apache.org/**jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/**
>>>>>>>>>>>>>>>>>> jira/********browse/FELIX-3761<http://issues.apache.org/jira/********browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> jira/******browse/FELIX-3761<http://issues.apache.org/**jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/********browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>>> jira/******browse/FELIX-3761<http://issues.apache.org/**jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/********browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <https**://issues.apache.org/***
>>>>>>>>>>>>>>>>>> *********jira/**browse/FELIX-*<http://issues.apache.org/**********jira/**browse/FELIX-*>
>>>>>>>>>>>>>>>>>> *3761<http://issues.apache.**org/********jira/**browse/**
>>>>>>>>>>>>>>>>>> FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********
>>>>>>>>>>>>>>>>>> jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http**://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>>> jira/******browse/FELIX-3761<http://issues.apache.org/**jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/********browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <https**://issues.apache.org/*****<http://issues.apache.org/***>
>>>>>>>>>>>>>>>>>> *****jira/**browse/FELIX-3761<**
>>>>>>>>>>>>>>>>>> http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http**://issues.apache.org/****
>>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <https**://issues.apache.org/***
>>>>>>>>>>>>>>>>>> *****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http**://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <https**://issues.apache.org/***
>>>>>>>>>>>>>>>>>> ***jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http**://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <https**://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <http**://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <https**://issues.apache.org/**jira/**browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3761<https://issues.apache.org/jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>>> This avoid grabbing the bundle lock when registering a
>>>>>>>>>>>>>>>>>> service,
>>>>>>>>>>>>>>>>>> so
>>>>>>>>>>>>>>>>>> maybe
>>>>>>>>>>>>>>>>>> it will help your situation. You could try to build the
>>>>>>>>>>>>>>>>>> framework
>>>>>>>>>>>>>>>>>> from
>>>>>>>>>>>>>>>>>> trunk and see if it makes a difference.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> If you aren't able to build from trunk, let me know and
>>>>>>>>>>>>>>>>>> I'll
>>>>>>>>>>>>>>>>>> try
>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>> publish a snapshot build since I don't think we have a
>>>>>>>>>>>>>>>>>> recent
>>>>>>>>>>>>>>>>>> one
>>>>>>>>>>>>>>>>>> (we
>>>>>>>>>>>>>>>>>> should do this no matter what).
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> -> richard
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>          If a refresh is happening in another thread, the
>>>>>>>>>>>>>>>>>> refresh
>>>>>>>>>>>>>>>>>> will
>>>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>> holding
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>        the framework's global lock, which will then call
>>>>>>>>>>>>>>>>>> IPOJO's
>>>>>>>>>>>>>>>>>> extender,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>      which
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>    then attempts to call a method on InstanceCreator, hence
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> leading
>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> deadlock.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Here are the stack traces:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Daemon Thread [Thread-1] (Suspended)
>>>>>>>>>>>>>>>>>>> Object.wait(long) line: not available [native method]
>>>>>>>>>>>>>>>>>>> Object[](Object).wait() line: 485
>>>>>>>>>>>>>>>>>>> Felix.acquireBundleLock(******************BundleImpl,
>>>>>>>>>>>>>>>>>>> int)
>>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>>> 4871
>>>>>>>>>>>>>>>>>>> Felix.registerService(******************BundleImpl,
>>>>>>>>>>>>>>>>>>> String[],
>>>>>>>>>>>>>>>>>>> Object,
>>>>>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>>> 3205
>>>>>>>>>>>>>>>>>>> BundleContextImpl.**************
>>>>>>>>>>>>>>>>>>> ****registerService(String[],
>>>>>>>>>>>>>>>>>>> Object,
>>>>>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>>> 346
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> IPojoContext.registerService(******************String[],
>>>>>>>>>>>>>>>>>>> Object,
>>>>>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>>> 385
>>>>>>>>>>>>>>>>>>> ProvidedService.******************registerService()
>>>>>>>>>>>>>>>>>>> line: 362
>>>>>>>>>>>>>>>>>>> ProvidedServiceHandler.__M_*******
>>>>>>>>>>>>>>>>>>> ***********stateChanged(int)
>>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>>> 509
>>>>>>>>>>>>>>>>>>> ProvidedServiceHandler.*********
>>>>>>>>>>>>>>>>>>> *********stateChanged(int)
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> not
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> available
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> InstanceManager.setState(int) line: 536
>>>>>>>>>>>>>>>>>>> InstanceManager.start() line: 418
>>>>>>>>>>>>>>>>>>> ComponentFactory.***************
>>>>>>>>>>>>>>>>>>> ***createInstance(Dictionary,
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> IPojoContext,
>>>>>>>>>>>>>>>>>>> HandlerManager[])
>>>>>>>>>>>>>>>>>>> line: 179
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> ComponentFactory(IPojoFactory)******************.**
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>>>>>>>>>> Dictionary,
>>>>>>>>>>>>>>>>>>> ServiceContext) line: 310
>>>>>>>>>>>>>>>>>>> ComponentFactory(IPojoFactory)******************.**
>>>>>>>>>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>>>>>> line: 239
>>>>>>>>>>>>>>>>>>> InstanceCreator$******************
>>>>>>>>>>>>>>>>>>> ManagedInstance.create(************
>>>>>>>>>>>>>>>>>>> ******
>>>>>>>>>>>>>>>>>>> IPojoFactory)
>>>>>>>>>>>>>>>>>>> line: 355
>>>>>>>>>>>>>>>>>>> InstanceCreator.addInstance(******************Dictionary,
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> long)
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> line: 89
>>>>>>>>>>>>>>>>>>> Extender.parse(Bundle, String) line: 306
>>>>>>>>>>>>>>>>>>> Extender.startManagementFor(******************Bundle)
>>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> 237
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Extender.access$600(Extender, Bundle) line: 52
>>>>>>>>>>>>>>>>>>> Extender$CreatorThread.run() line: 769
>>>>>>>>>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Daemon Thread [FelixFrameworkWiring] (Suspended)
>>>>>>>>>>>>>>>>>>> InstanceCreator.******************
>>>>>>>>>>>>>>>>>>> removeInstancesFromBundle(*********
>>>>>>>>>>>>>>>>>>> *****
>>>>>>>>>>>>>>>>>>> ****long)
>>>>>>>>>>>>>>>>>>> line: 116
>>>>>>>>>>>>>>>>>>> Extender.closeManagementFor(******************Bundle)
>>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>>> 171
>>>>>>>>>>>>>>>>>>> Extender.bundleChanged(******************BundleEvent)
>>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>>> 153
>>>>>>>>>>>>>>>>>>> EventDispatcher.******************
>>>>>>>>>>>>>>>>>>> invokeBundleListenerCallback(******
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> ***
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> ****
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> *****Bundle,
>>>>>>>>>>>>>>>>>>> EventListener,
>>>>>>>>>>>>>>>>>>> EventObject) line: 868
>>>>>>>>>>>>>>>>>>> EventDispatcher.******************
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> fireEventImmediately(********
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> EventDispatcher,
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> int, Map,
>>>>>>>>>>>>>>>>>>> EventObject, Dictionary) line: 789
>>>>>>>>>>>>>>>>>>> EventDispatcher.******************
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> fireBundleEvent(BundleEvent,
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Framework)
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> 514
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Felix.fireBundleEvent(int, Bundle) line: 4244
>>>>>>>>>>>>>>>>>>> Felix.stopBundle(BundleImpl, boolean) line: 2351
>>>>>>>>>>>>>>>>>>> Felix$RefreshHelper.stop() line: 4629
>>>>>>>>>>>>>>>>>>> Felix.refreshPackages(******************Collection,
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> FrameworkListener[])
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> 3951
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> FrameworkWiringImpl.run() line: 172
>>>>>>>>>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>


Re: IPOJO initialization + refresh deadlock

Posted by Jad Naous <ja...@nerati.com>.
On Tue, Jan 1, 2013 at 2:24 PM, Richard S. Hall <he...@ungoverned.org>wrote:

>
> On 1/1/13 13:14, Jad Naous wrote:
>
>> On Tue, Jan 1, 2013 at 9:58 AM, Richard S. Hall <heavy@ungoverned.org
>> >wrote:
>>
>>  On 1/1/13 12:40, Jad Naous wrote:
>>>
>>>  On Tue, Jan 1, 2013 at 9:16 AM, Richard S. Hall <heavy@ungoverned.org
>>>>
>>>>> wrote:
>>>>>
>>>>   On 1/1/13 11:51, Jad Naous wrote:
>>>>
>>>>>   On Tue, Jan 1, 2013 at 8:30 AM, Richard S. Hall <
>>>>> heavy@ungoverned.org
>>>>>
>>>>>> wrote:
>>>>>>>
>>>>>>>     On 1/1/13 11:13, Jad Naous wrote:
>>>>>>
>>>>>>     On Tue, Jan 1, 2013 at 7:58 AM, Richard S. Hall <
>>>>>>> heavy@ungoverned.org
>>>>>>>
>>>>>>>  wrote:
>>>>>>>>
>>>>>>>>>      On 1/1/13 10:37, Jad Naous wrote:
>>>>>>>>>
>>>>>>>>      On Tue, Jan 1, 2013 at 6:21 AM, Richard S. Hall<
>>>>>>>>
>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>
>>>>>>>>>  **
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>      On 1/1/13 06:09, Jad Naous wrote:
>>>>>>>>>>
>>>>>>>>>>       Happy new year!
>>>>>>>>>>
>>>>>>>>>>     I'm running into another deadlock now. It seems like there
>>>>>>>>>>> needs
>>>>>>>>>>> to
>>>>>>>>>>>
>>>>>>>>>>>  be a
>>>>>>>>>>>> more rigorous study of how locking is used in the framework. In
>>>>>>>>>>>> particular,
>>>>>>>>>>>> it seems like the framework should not be invoking any listeners
>>>>>>>>>>>> within
>>>>>>>>>>>> the
>>>>>>>>>>>> same thread that's executing the stopping/starting/refreshing of
>>>>>>>>>>>> bundles...
>>>>>>>>>>>> Anywhere that happens there will be a potential for a deadlock
>>>>>>>>>>>> because
>>>>>>>>>>>> of
>>>>>>>>>>>> a
>>>>>>>>>>>> misordering of lock acquisition. The framework should never call
>>>>>>>>>>>> into
>>>>>>>>>>>> user
>>>>>>>>>>>> code with any locks held.
>>>>>>>>>>>>
>>>>>>>>>>>>      Yeah, tell me about it, but it is not possible in all
>>>>>>>>>>>> cases,
>>>>>>>>>>>>
>>>>>>>>>>>>    unfortunately. I personally feel that all events should be
>>>>>>>>>>>>
>>>>>>>>>>>>  asynchronous,
>>>>>>>>>>> but that's another story.
>>>>>>>>>>>
>>>>>>>>>>> -> richard
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>      I'm happy to help fix this, but I need some pointers as to
>>>>>>>>>>> what
>>>>>>>>>>> needs to
>>>>>>>>>>>
>>>>>>>>>>>    happen. For synchronous events, what are the requirements? Or
>>>>>>>>>>> is
>>>>>>>>>>>
>>>>>>>>>>>  this
>>>>>>>>>> not
>>>>>>>>>> fixable? Can the lock be released before firing the events?
>>>>>>>>>>
>>>>>>>>>>     I don't think it can be fixed, some of these things are baked
>>>>>>>>>> into
>>>>>>>>>> the
>>>>>>>>>>
>>>>>>>>>>   spec. I think the spec even states somewhere that synchronous
>>>>>>>>>> event
>>>>>>>>>>
>>>>>>>>> listeners must be careful since they may be holding framework
>>>>>>>>> locks,
>>>>>>>>> so
>>>>>>>>> they shouldn't try to do too much. Of course, that is not easy
>>>>>>>>> advice
>>>>>>>>> to
>>>>>>>>> follow since framework impls vary.
>>>>>>>>>
>>>>>>>>> We even have bugs open that say we aren't holding locks when we
>>>>>>>>> should
>>>>>>>>> be,
>>>>>>>>> e.g.:
>>>>>>>>>
>>>>>>>>>         https://issues.apache.org/**********jira/browse/FELIX-3806<https://issues.apache.org/********jira/browse/FELIX-3806>
>>>>>>>>> <htt**ps://issues.apache.org/********jira/browse/FELIX-3806<https://issues.apache.org/******jira/browse/FELIX-3806>
>>>>>>>>> >
>>>>>>>>> <https**://issues.apache.org/******jira/**browse/FELIX-3806<http://issues.apache.org/****jira/**browse/FELIX-3806>
>>>>>>>>> <ht**tps://issues.apache.org/******jira/browse/FELIX-3806<https://issues.apache.org/****jira/browse/FELIX-3806>
>>>>>>>>> >
>>>>>>>>> <https:/**/issues.apache.org/******jira/**browse/FELIX-3806<http://issues.apache.org/****jira/**browse/FELIX-3806>
>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3806<http://issues.apache.org/**jira/**browse/FELIX-3806>
>>>>>>>>> >
>>>>>>>>> <http**s://issues.apache.org/****jira/**browse/FELIX-3806<http://issues.apache.org/**jira/**browse/FELIX-3806>
>>>>>>>>> <http**s://issues.apache.org/**jira/**browse/FELIX-3806<https://issues.apache.org/**jira/browse/FELIX-3806>
>>>>>>>>> >
>>>>>>>>> <https:/**/issues.apache.org/******jira/**browse/FELIX-3806<http://issues.apache.org/****jira/**browse/FELIX-3806>
>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3806<http://issues.apache.org/**jira/**browse/FELIX-3806>
>>>>>>>>> >
>>>>>>>>> <http**://issues.apache.org/**jira/****browse/FELIX-3806<http://issues.apache.org/jira/****browse/FELIX-3806>
>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3806<http://issues.apache.org/jira/**browse/FELIX-3806>
>>>>>>>>> >
>>>>>>>>> <https**://issues.apache.org/****jira/**browse/FELIX-3806<http://issues.apache.org/**jira/**browse/FELIX-3806>
>>>>>>>>> <http**://issues.apache.org/jira/****browse/FELIX-3806<http://issues.apache.org/jira/**browse/FELIX-3806>
>>>>>>>>> >
>>>>>>>>>
>>>>>>>>> <https**://issues.apache.org/**jira/**browse/FELIX-3806<http://issues.apache.org/jira/**browse/FELIX-3806>
>>>>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3806<https://issues.apache.org/jira/browse/FELIX-3806>
>>>>>>>>> >
>>>>>>>>>
>>>>>>>>> This is one of the poorly designed parts of the OSGi spec. It was
>>>>>>>>> meant
>>>>>>>>> to
>>>>>>>>> work in a world were services can "come and go at anytime", but it
>>>>>>>>> allows
>>>>>>>>> users to clings to synchronous events to do tons of work.
>>>>>>>>>
>>>>>>>>>     Then I guess this is something that ipojo is doing incorrectly?
>>>>>>>>>
>>>>>>>>>   Hard for me to say, but if there is a case where we can fire
>>>>>>>>> events
>>>>>>>>>
>>>>>>>> without holding locks, then you are correct in saying that we should
>>>>>>> try
>>>>>>> to
>>>>>>> avoid doing so. Likewise, users should avoid doing too much when they
>>>>>>> receive synchronous events.
>>>>>>>
>>>>>>>    Well, iPOJO is not doing anything. It is just loading a class, and
>>>>>>>
>>>>>>>  that's
>>>>>> what's causing the global lock to be acquired.
>>>>>>
>>>>>>   You're really going to make me look into this, aren't you? ;-)
>>>>>>
>>>>>
>>>>>   :) Thanks from me and the tons of other people using this framework!
>>>>>
>>>>
>>>>   I'm not sure what is going on, but for whatever reason you are in the
>>>>
>>>>> middle of a refresh (which requires global lock) while it appears that
>>>>> iPOJO is starting to manage a new bundle, which ultimately results in
>>>>> someone trying to do a dynamic import (which also requires global
>>>>> lock).
>>>>>
>>>>> There isn't much we can do in this case other than try to detect it and
>>>>> fail for the global lock acquire...
>>>>>
>>>>>   And ipojo will have to deal... Seems simpler if ipojo didn't try to
>>>>>
>>>> unregister services or do that sort of thing (or at least not acquire
>>>> any
>>>> locks of its own) synchronously.
>>>>
>>>>  iPOJO doesn't appear to be doing anything synchronously here. It looks
>>> like it is working on another thread to start management of a perhaps
>>> newly
>>> installed or updated bundle. The issue actually arises because the
>>> framework instigates a dynamic import when trying to determine if it
>>> should
>>> deliver the event to a service listener (it needs to try to load classes
>>> in
>>> some cases to see if the service's class is compatible with the
>>> listener's
>>> service class).
>>>
>>> This is really ugly. Not really sure what we could do here other than
>>> always fail service event delivery if the listener bundle doesn't already
>>> have access to the service class. But that would still be complicated to
>>> do
>>> and would lead to other failure scenarios.
>>>
>>> I'd have to think about that one.
>>>
>>>
>>>  That's in one thread. In the other, the framework calls stopBundle() and
>> ipojo is reacting to that be calling InstanceCreator.removeFactory(**),
>> and
>> this is the guy that grabs the other lock. If ipojo instead either doesn't
>> grab the lock or pushes the work somewhere else, this ugly mess goes
>> away...
>>
>
> Well, the strange thing for me is that iPOJO is trying start managing the
> same bundle that the framework is trying to stop, effectively iPOJO is
> trying to start and stop managing the same bundle.
>
> In this case, you are correct in that iPOJO should also not hold its own
> locks while calling into the framework, since that resulted in a callback
> into iPOJO for the same lock, but on a different thread.
>
>
Do you know if Clement ever responds to emails on this mailing list or
somewhere else?

Jad.


> -> richard
>
>
>>
>>  -> richard
>>>
>>>
>>>    -> richard
>>>>
>>>>>
>>>>>     -> richard
>>>>>
>>>>>>      -> richard
>>>>>>>
>>>>>>>        Name: Thread-2
>>>>>>>>
>>>>>>>>>   State: WAITING on [Ljava.lang.Object;@4a018e1b
>>>>>>>>>
>>>>>>>>>> Total blocked: 38,871,649  Total waited: 38,871,650
>>>>>>>>>>>
>>>>>>>>>>>> Stack trace:
>>>>>>>>>>>>        java.lang.Object.wait(Native Method)
>>>>>>>>>>>> java.lang.Object.wait(Object.************java:485)
>>>>>>>>>>>> org.apache.felix.framework.************Felix.**
>>>>>>>>>>>> acquireGlobalLock(***
>>>>>>>>>>>> ***
>>>>>>>>>>>> Felix.**
>>>>>>>>>>>> **java:5033)
>>>>>>>>>>>> org.apache.felix.framework.************StatefulResolver.**
>>>>>>>>>>>> resolve(**
>>>>>>>>>>>> **
>>>>>>>>>>>> StatefulResolver.java:451)
>>>>>>>>>>>> org.apache.felix.framework.************BundleWiringImpl.****
>>>>>>>>>>>> searchDynamicImports(**
>>>>>>>>>>>> BundleWiringImpl.java:1578)
>>>>>>>>>>>> org.apache.felix.framework.************BundleWiringImpl.**
>>>>>>>>>>>> findClassOrResourceByDelegatio************n(BundleWiringImpl.**
>>>>>>>>>>>> **
>>>>>>>>>>>> java:**
>>>>>>>>>>>> ****1478)
>>>>>>>>>>>> org.apache.felix.framework.************BundleWiringImpl.**
>>>>>>>>>>>> access$****
>>>>>>>>>>>> 400(****
>>>>>>>>>>>> BundleWiringImpl.java:75)
>>>>>>>>>>>> org.apache.felix.framework.************BundleWiringImpl$**
>>>>>>>>>>>> BundleClassLoader.loadClass(************BundleWiringImpl.java:*
>>>>>>>>>>>> *****
>>>>>>>>>>>> 1882)
>>>>>>>>>>>> java.lang.ClassLoader.************loadClass(ClassLoader.java:**
>>>>>>>>>>>> *****
>>>>>>>>>>>> **
>>>>>>>>>>>> ***247)
>>>>>>>>>>>> org.apache.felix.framework.************BundleWiringImpl.****
>>>>>>>>>>>> getClassByDelegation(**
>>>>>>>>>>>> BundleWiringImpl.java:1356)
>>>>>>>>>>>> org.apache.felix.framework.**************
>>>>>>>>>>>> ServiceRegistrationImpl$****
>>>>>>>>>>>> ServiceReferenceImpl.************isAssignableTo(****
>>>>>>>>>>>> ServiceRegistrationImpl.java:************
>>>>>>>>>>>> 548)
>>>>>>>>>>>> org.apache.felix.framework.************util.Util.****
>>>>>>>>>>>> isServiceAssignable(****
>>>>>>>>>>>> Util.java:280)
>>>>>>>>>>>> org.apache.felix.framework.************util.EventDispatcher.**
>>>>>>>>>>>> invokeServiceListenerCallback(************EventDispatcher.**
>>>>>>>>>>>> java:***
>>>>>>>>>>>> *916)
>>>>>>>>>>>> org.apache.felix.framework.************util.EventDispatcher.***
>>>>>>>>>>>> ***
>>>>>>>>>>>> fireEventImmediately(
>>>>>>>>>>>> **EventDispatcher.java:793)
>>>>>>>>>>>> org.apache.felix.framework.************util.EventDispatcher.***
>>>>>>>>>>>> ***
>>>>>>>>>>>> fireServiceEvent(**
>>>>>>>>>>>> EventDispatcher.java:543)
>>>>>>>>>>>> org.apache.felix.framework.************Felix.fireServiceEvent(*
>>>>>>>>>>>> ***
>>>>>>>>>>>> Felix.*****
>>>>>>>>>>>> *java:4346)
>>>>>>>>>>>> org.apache.felix.framework.************Felix.registerService(**
>>>>>>>>>>>> **
>>>>>>>>>>>> Felix.******
>>>>>>>>>>>> java:3356)
>>>>>>>>>>>> org.apache.felix.framework.************BundleContextImpl.******
>>>>>>>>>>>> **
>>>>>>>>>>>> registerService(**
>>>>>>>>>>>> BundleContextImpl.java:346)
>>>>>>>>>>>> org.apache.felix.ipojo.************IPojoFactory.start(****
>>>>>>>>>>>> IPojoFactory.java:613)
>>>>>>>>>>>>          - locked org.apache.felix.ipojo.************
>>>>>>>>>>>> ComponentFactory@468034b6
>>>>>>>>>>>> org.apache.felix.ipojo.************Extender.********
>>>>>>>>>>>> createAbstractFactory(**
>>>>>>>>>>>> Extender.java:520)
>>>>>>>>>>>> org.apache.felix.ipojo.************Extender.parse(Extender.**
>>>>>>>>>>>> java:**
>>>>>>>>>>>> ***
>>>>>>>>>>>> *****301)
>>>>>>>>>>>> org.apache.felix.ipojo.************Extender.**
>>>>>>>>>>>> startManagementFor(***
>>>>>>>>>>>> *******
>>>>>>>>>>>> Extender.java:237)
>>>>>>>>>>>> org.apache.felix.ipojo.************Extender.access$600(**
>>>>>>>>>>>> Extender.**
>>>>>>>>>>>> *****
>>>>>>>>>>>> ***java:52)
>>>>>>>>>>>> org.apache.felix.ipojo.************Extender$CreatorThread.run(*
>>>>>>>>>>>> *****
>>>>>>>>>>>> ******
>>>>>>>>>>>> Extender.java:769)
>>>>>>>>>>>> java.lang.Thread.run(Thread.************java:662)
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Name: FelixFrameworkWiring
>>>>>>>>>>>> State: BLOCKED on org.apache.felix.ipojo.****
>>>>>>>>>>>>
>>>>>>>>>>>> ComponentFactory@468034b6owned
>>>>>>>>>>>>
>>>>>>>>>>>> by: Thread-2
>>>>>>>>>>>> Total blocked: 7  Total waited: 1
>>>>>>>>>>>>
>>>>>>>>>>>> Stack trace:
>>>>>>>>>>>>        org.apache.felix.ipojo.************IPojoFactory.****
>>>>>>>>>>>> removeFactoryStateListener(**
>>>>>>>>>>>> IPojoFactory.java:511)
>>>>>>>>>>>> org.apache.felix.ipojo.************InstanceCreator.**
>>>>>>>>>>>> removeFactory(**
>>>>>>>>>>>> ******
>>>>>>>>>>>> InstanceCreator.java:199)
>>>>>>>>>>>> org.apache.felix.ipojo.************Extender.**
>>>>>>>>>>>> closeManagementFor(***
>>>>>>>>>>>> *******
>>>>>>>>>>>> Extender.java:180)
>>>>>>>>>>>> org.apache.felix.ipojo.************Extender.bundleChanged(****
>>>>>>>>>>>> Extender.java:153)
>>>>>>>>>>>> org.apache.felix.framework.************util.EventDispatcher.**
>>>>>>>>>>>> invokeBundleListenerCallback(************EventDispatcher.java:*
>>>>>>>>>>>> ***
>>>>>>>>>>>> 868)
>>>>>>>>>>>> org.apache.felix.framework.************util.EventDispatcher.***
>>>>>>>>>>>> ***
>>>>>>>>>>>> fireEventImmediately(
>>>>>>>>>>>> **EventDispatcher.java:789)
>>>>>>>>>>>> org.apache.felix.framework.************util.EventDispatcher.***
>>>>>>>>>>>> ***
>>>>>>>>>>>> fireBundleEvent(**
>>>>>>>>>>>> EventDispatcher.java:514)
>>>>>>>>>>>> org.apache.felix.framework.************Felix.fireBundleEvent(**
>>>>>>>>>>>> **
>>>>>>>>>>>> Felix.******
>>>>>>>>>>>> java:4330)
>>>>>>>>>>>> org.apache.felix.framework.************Felix.stopBundle(Felix.*
>>>>>>>>>>>> ***
>>>>>>>>>>>> java:***
>>>>>>>>>>>> ***2451)
>>>>>>>>>>>> org.apache.felix.framework.************Felix$RefreshHelper.**
>>>>>>>>>>>> stop(**
>>>>>>>>>>>> ******
>>>>>>>>>>>> Felix.java:4715)
>>>>>>>>>>>> org.apache.felix.framework.************Felix.refreshPackages(**
>>>>>>>>>>>> **
>>>>>>>>>>>> Felix.******
>>>>>>>>>>>> java:4037)
>>>>>>>>>>>> org.apache.felix.framework.************FrameworkWiringImpl.**
>>>>>>>>>>>> run(****
>>>>>>>>>>>> FrameworkWiringImpl.java:178)
>>>>>>>>>>>> java.lang.Thread.run(Thread.************java:662)
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Sat, Dec 22, 2012 at 6:39 PM, Richard S. Hall <
>>>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>>>
>>>>>>>>>>>>     wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>         On 12/22/12 20:41 , Jad Naous wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>>         Thanks! I was building with java6. Don't know if that
>>>>>>>>>>>>> is
>>>>>>>>>>>>>
>>>>>>>>>>>> the
>>>>>>>>>>>>
>>>>>>>>>>>>   issue.
>>>>>>>>>>>>
>>>>>>>>>>>>>     Anyway,
>>>>>>>>>>>>>
>>>>>>>>>>>>>   I tested the snapshot, and looks like that fixes it.
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Any idea when 4.1.0 will be released? Do you know if
>>>>>>>>>>>>>> http://svn.apache.org/viewvc?**************view=revision&**<http://svn.apache.org/viewvc?************view=revision&**>
>>>>>>>>>>>>>> revision=**<http://svn.apache.**org/viewvc?**********view=**
>>>>>>>>>>>>>> revision&revision=**<http://svn.apache.org/viewvc?**********view=revision&revision=**>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> ****<http://svn.apache.org/****viewvc?********view=revision&*
>>>>>>>>>>>>>> *** <http://svn.apache.org/**viewvc?********view=revision&**>
>>>>>>>>>>>>>> revision=****<http://svn.**apache.org/viewvc?**********
>>>>>>>>>>>>>> view=revision&revision=****<http://svn.apache.org/viewvc?********view=revision&revision=****>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> **1421958<http://svn.apache.******org/viewvc?******view=**
>>>>>>>>>>>>>> revision&revision=****1421958<****http://svn.apache.org/**
>>>>>>>>>>>>>> viewvc?** <http://svn.apache.org/viewvc?**>
>>>>>>>>>>>>>> ******view=revision&revision=********1421958<http://svn.**
>>>>>>>>>>>>>> apache.org/viewvc?******view=**revision&revision=****1421958<http://svn.apache.org/viewvc?******view=revision&revision=****1421958>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> <http://svn.apache.**org/******viewvc?****view=revision&**
>>>>>>>>>>>>>> revision=**1421958<http://svn.******apache.org/viewvc?******
>>>>>>>>>>>>>> view=** <http://apache.org/viewvc?****view=**>
>>>>>>>>>>>>>> ** <http://apache.org/viewvc?******view=**<http://apache.org/viewvc?****view=**>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> revision&revision=**1421958<**ht**tp://svn.apache.org/**
>>>>>>>>>>>>>> viewvc?**** <http://svn.apache.org/viewvc?****>
>>>>>>>>>>>>>> **view=revision&revision=******1421958<http://svn.apache.org/
>>>>>>>>>>>>>> **viewvc?****view=revision&**revision=**1421958<http://svn.apache.org/viewvc?****view=revision&revision=**1421958>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> <http://svn.apache.org/**********viewvc?**view=revision&****<http://svn.apache.org/********viewvc?**view=revision&****>
>>>>>>>>>>>>>> <h**ttp://svn.apache.org/********viewvc?**view=revision&****<http://svn.apache.org/******viewvc?**view=revision&****>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> <ht**tp://svn.apache.org/********viewvc?**view=revision&****<http://svn.apache.org/******viewvc?**view=revision&****>
>>>>>>>>>>>>>> <h**ttp://svn.apache.org/******viewvc?**view=revision&****<http://svn.apache.org/****viewvc?**view=revision&****>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> revision=1421958<http://svn.******
>>>>>>>>>>>>>> apache.org/**viewvc?**view=****<http://apache.org/**viewvc?**view=**>
>>>>>>>>>>>>>> <http://apache.org/**viewvc?****view=**<http://apache.org/**viewvc?**view=**>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> revision&**revision=1421958<**ht**tp://svn.apache.org/****
>>>>>>>>>>>>>> viewvc?** <http://svn.apache.org/**viewvc?**>
>>>>>>>>>>>>>> **view=revision&**revision=****1421958<http://svn.apache.org/
>>>>>>>>>>>>>> ****viewvc?**view=revision&****revision=1421958<http://svn.apache.org/**viewvc?**view=revision&**revision=1421958>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> <http://svn.**apache.org/******viewvc?**view=**revision&**<http://apache.org/****viewvc?**view=**revision&**>
>>>>>>>>>>>>>> <ht**tp://apache.org/**viewvc?****view=**revision&**<http://apache.org/**viewvc?**view=**revision&**>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> revision=1421958<http://**apac**he.org/viewvc?**view=****<http://apache.org/viewvc?**view=****>
>>>>>>>>>>>>>> revision&revision=1421958<http**
>>>>>>>>>>>>>> ://apache.org/viewvc?**view=****revision&revision=1421958<http://apache.org/viewvc?**view=**revision&revision=1421958>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> <http://svn.**apache.org/****viewvc?**view=**<http://apache.org/**viewvc?**view=**>
>>>>>>>>>>>>>> <http://**apache.org/viewvc?**view=**<http://apache.org/viewvc?**view=**>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> revision&revision=1421958<**http**://svn.apache.org/**
>>>>>>>>>>>>>> viewvc?**** <http://svn.apache.org/viewvc?****>
>>>>>>>>>>>>>> view=revision&revision=**1421958<http://svn.apache.org/**
>>>>>>>>>>>>>> viewvc?**view=revision&**revision=1421958<http://svn.apache.org/viewvc?**view=revision&revision=1421958>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>> <http://svn.apache.org/************viewvc?view=revision&**<http://svn.apache.org/**********viewvc?view=revision&**>
>>>>>>>>>>>>>> revision=****<http://svn.**apache.org/********viewvc?**
>>>>>>>>>>>>>> view=revision&revision=****<http://svn.apache.org/********viewvc?view=revision&revision=****>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> <http://svn.**apache.org/********viewvc?view=**<http://apache.org/******viewvc?view=**>
>>>>>>>>>>>>>> revision&revision=**<http://**svn.apache.org/******viewvc?**
>>>>>>>>>>>>>> view=revision&revision=**<http://svn.apache.org/******viewvc?view=revision&revision=**>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> ****1421958<http://svn.apache.******org/****viewvc?view=**
>>>>>>>>>>>>>> revision&**
>>>>>>>>>>>>>> revision=****1421958<http://****svn.apache.org/****viewvc?**<http://svn.apache.org/****viewvc?**>
>>>>>>>>>>>>>> view=revision&revision=********1421958<http://svn.apache.org/
>>>>>>>>>>>>>> ******viewvc?view=revision&**revision=****1421958<http://svn.apache.org/****viewvc?view=revision&revision=****1421958>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> <http://svn.apache.**org/********viewvc?view=revision&**
>>>>>>>>>>>>>> revision=**1421958<http://svn.******
>>>>>>>>>>>>>> apache.org/**viewvc?view=****<http://apache.org/**viewvc?view=**>
>>>>>>>>>>>>>> revision&revision=**1421958<**ht**tp://svn.apache.org/****
>>>>>>>>>>>>>> viewvc?** <http://svn.apache.org/**viewvc?**>
>>>>>>>>>>>>>> view=revision&revision=******1421958<http://svn.apache.org/**
>>>>>>>>>>>>>> **viewvc?view=revision&**revision=**1421958<http://svn.apache.org/**viewvc?view=revision&revision=**1421958>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> <http://svn.apache.**org/********viewvc?view=revision&****
>>>>>>>>>>>>>> revision=1421958<http://svn.********apache.org/viewvc?view=**
>>>>>>>>>>>>>> <**ht*
>>>>>>>>>>>>>> *tp://apache.org/viewvc?view=****<http://apache.org/viewvc?view=**>
>>>>>>>>>>>>>> <http://apache.org/viewvc?**view=**<http://apache.org/viewvc?view=**>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>> revision&revision=1421958<****http**://svn.apache.org/**
>>>>>>>>>>>>>> viewvc?view=** <http://svn.apache.org/viewvc?**view=**<http://svn.apache.org/viewvc?view=**>
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> revision&revision=1421958<**http**://svn.apache.org/**
>>>>>>>>>>>>>> viewvc?view=* <http://svn.apache.org/viewvc?view=*>
>>>>>>>>>>>>>> *revision&revision=1421958<htt**p://svn.apache.org/viewvc?**
>>>>>>>>>>>>>> view=revision&revision=1421958<http://svn.apache.org/viewvc?view=revision&revision=1421958>
>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>     will
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>   apply
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>   cleanly onto 4.0.3? Otherwise, how stable do you think is
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 4.1.0-SNAPSHOT?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>       The release version will be 4.2.0, but the
>>>>>>>>>>>>>> 4.1.0-SNAPSHOT
>>>>>>>>>>>>>> build
>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>     be
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>   reasonably stable. We try to keep trunk stable.
>>>>>>>>>>>>>>
>>>>>>>>>>>>> I want to try to get a release out soon, but I don't have a
>>>>>>>>>>>>> specific
>>>>>>>>>>>>> time
>>>>>>>>>>>>> table. I'll try to get in done in January if all goes well.
>>>>>>>>>>>>>
>>>>>>>>>>>>> -> richard
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>       Thanks!
>>>>>>>>>>>>>
>>>>>>>>>>>>>     Jad.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>  On Fri, Dec 21, 2012 at 6:49 AM, Richard S. Hall <
>>>>>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>      wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>          It built fine for me. I'm was building with Java 7.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>        Regardless, I deployed snapshots of framework, main,
>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>     main.distribution, so just grab what you want from the
>>>>>>>>>>>>>> Apache
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>  snapshot
>>>>>>>>>>>>>>> repo
>>>>>>>>>>>>>>> to try it out.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> -> richard
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On 12/20/12 18:56 , Jad Naous wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>        It does look like the same issue.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>      Got the trunk/framework. mvn clean install gives:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>    [INFO] --- maven-compiler-plugin:2.3.2:****
>>>>>>>>>>>>>>> ************compile
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> (default-compile) @
>>>>>>>>>>>>>>>> org.apache.felix.framework ---
>>>>>>>>>>>>>>>> Dec 20, 2012 3:54:59 PM org.sonatype.guice.bean.****
>>>>>>>>>>>>>>>> reflect.Logs$JULSink
>>>>>>>>>>>>>>>> warn
>>>>>>>>>>>>>>>> WARNING: Error injecting: org.apache.maven.plugin.********
>>>>>>>>>>>>>>>> **
>>>>>>>>>>>>>>>> ******
>>>>>>>>>>>>>>>> CompilerMojo
>>>>>>>>>>>>>>>> java.lang.****************NoClassDefFoundError:
>>>>>>>>>>>>>>>> org/codehaus/plexus/compiler/***
>>>>>>>>>>>>>>>> *************util/scan/******
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> InclusionScanException
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>> jad.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Thu, Dec 20, 2012 at 3:22 PM, Richard S. Hall <
>>>>>>>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>       wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>           On 12/20/12 4:10 PM, Jad Naous wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>            If a bundle undergoes a refresh while ipojo is
>>>>>>>>>>>>>>>> still
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>   initializing
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>        components, a deadlock can happen.  The issue is
>>>>>>>>>>>>>>>> that if
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>   ipojo is
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>     attempting to register a service, it will be doing it
>>>>>>>>>>>>>>>>> while
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>   synchronizing
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> on the InstanceCreator instance. It will then try to
>>>>>>>>>>>>>>>>>> register
>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>> service
>>>>>>>>>>>>>>>>>> which requires the framework's global lock.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>         Registering a service doesn't require a global,
>>>>>>>>>>>>>>>>>> just
>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>> bundle
>>>>>>>>>>>>>>>>>> lock.
>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>       think this could be related to:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>              https://issues.apache.org/************<https://issues.apache.org/**********>
>>>>>>>>>>>>>>>>>> <https://issues.apache.**org/********<https://issues.apache.org/********>
>>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>> <https://issues.apache.**org/********<
>>>>>>>>>>>>>>>>>> https://issues.apache.**org/******<https://issues.apache.org/******>
>>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>>   ******jira/browse/FELIX-3761<****h**ttps://
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> issues.apache.org/******* <http://issues.apache.org/******
>>>>>>>>>>>>>>>>> * <http://issues.apache.org/*****>>
>>>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<****
>>>>>>>>>>>>>>>>> https://issues.apache.org/******
>>>>>>>>>>>>>>>>> ********jira/browse/FELIX-3761<https://issues.apache.org/************jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<https://issues.apache.org/*****
>>>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<https://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttps://issues.apache.org/*****<http://issues.apache.org/***>
>>>>>>>>>>>>>>>>> ***********jira/browse/FELIX-******<
>>>>>>>>>>>>>>>>> http://issues.apache.org/**************jira/browse/FELIX-*
>>>>>>>>>>>>>>>>> ***<http://issues.apache.org/************jira/browse/FELIX-**>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> 3761<http://issues.apache.org/**
>>>>>>>>>>>>>>>>> ************jira/browse/FELIX-<http://issues.apache.org/************jira/browse/FELIX->
>>>>>>>>>>>>>>>>> **3761<http://issues.apache.**org/**********jira/browse/**
>>>>>>>>>>>>>>>>> FELIX-3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <https://issues.apache.**org/***
>>>>>>>>>>>>>>>>> *********jira/browse/FELIX-***
>>>>>>>>>>>>>>>>> *3761<https://issues.apache.****
>>>>>>>>>>>>>>>>> org/********jira/browse/FELIX-
>>>>>>>>>>>>>>>>> **3761<https://issues.apache.**
>>>>>>>>>>>>>>>>> org/********jira/browse/FELIX-**3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**ps://issues.apache.org/*****<http://issues.apache.org/***>
>>>>>>>>>>>>>>>>> ***********jira/browse/FELIX-******<
>>>>>>>>>>>>>>>>> http://issues.apache.org/**************jira/browse/FELIX-*
>>>>>>>>>>>>>>>>> ***<http://issues.apache.org/************jira/browse/FELIX-**>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> 3761<http://issues.apache.org/**
>>>>>>>>>>>>>>>>> ************jira/browse/FELIX-<http://issues.apache.org/************jira/browse/FELIX->
>>>>>>>>>>>>>>>>> **3761<http://issues.apache.**org/**********jira/browse/**
>>>>>>>>>>>>>>>>> FELIX-3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <http://issues.apache.org/******
>>>>>>>>>>>>>>>>> ********jira/browse/FELIX-3761<http://issues.apache.org/************jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> ******jira/browse/FELIX-3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ********jira/browse/FELIX-3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> ****jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>>> <**https://issues.apache.org/***
>>>>>>>>>>>>>>>>> ***********jira/browse/FELIX-*<https://issues.apache.org/************jira/browse/FELIX-*>
>>>>>>>>>>>>>>>>> *3761<https://issues.apache.**org/**********jira/browse/**
>>>>>>>>>>>>>>>>> FELIX-3761<https://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <https://issues.apache.**org/***
>>>>>>>>>>>>>>>>> *******jira/browse/FELIX-**
>>>>>>>>>>>>>>>>> 3761<https://issues.apache.**
>>>>>>>>>>>>>>>>> org/********jira/browse/FELIX-**3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <**https://issues.apache.org/*****<https://issues.apache.org/***>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<**
>>>>>>>>>>>>>>>>> https://issues.apache.org/**********jira/browse/FELIX-3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <**https://issues.apache.org/***
>>>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <**https://issues.apache.org/******
>>>>>>>>>>>>>>>>> **jira/browse/FELIX-3761<https://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <https**://issues.apache.org/*****<http://issues.apache.org/***>
>>>>>>>>>>>>>>>>> *********jira/**browse/FELIX-******<
>>>>>>>>>>>>>>>>> http://issues.apache.org/************jira/**browse/FELIX-*
>>>>>>>>>>>>>>>>> ***<http://issues.apache.org/**********jira/**browse/FELIX-**>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> 3761<http://issues.apache.org/**
>>>>>>>>>>>>>>>>> **********jira/**browse/FELIX-<http://issues.apache.org/**********jira/**browse/FELIX->
>>>>>>>>>>>>>>>>> **3761<http://issues.apache.**org/********jira/**browse/**
>>>>>>>>>>>>>>>>> FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <http://issues.apache.org/******
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/**********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>>> <**http://issues.apache.org/******<http://issues.apache.org/****>
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-**3761<http://issues.apache.org/
>>>>>>>>>>>>>>>>> **********jira/**browse/FELIX-**3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/****
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/***
>>>>>>>>>>>>>>>>> ***********jira/browse/FELIX-*<http://issues.apache.org/************jira/browse/FELIX-*>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> *3761<http://issues.apache.**org/**********jira/browse/**
>>>>>>>>>>>>>>>>> FELIX-3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <http://issues.apache.org/******
>>>>>>>>>>>>>>>>> ******jira/browse/FELIX-3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********
>>>>>>>>>>>>>>>>> **jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>>>> ********jira/browse/FELIX-3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> ****jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ******jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/*****<http://issues.apache.org/***>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<**
>>>>>>>>>>>>>>>>> http://issues.apache.org/**********jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>>>> ******jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/***
>>>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <**http://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/***
>>>>>>>>>>>>>>>>> *****jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/******jira/browse/FELIX-3761<https://issues.apache.org/****jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <https:/**/issues.apache.org/*****<http://issues.apache.org/***>
>>>>>>>>>>>>>>>>> *********jira/**browse/FELIX-******<
>>>>>>>>>>>>>>>>> http://issues.apache.org/************jira/**browse/FELIX-*
>>>>>>>>>>>>>>>>> ***<http://issues.apache.org/**********jira/**browse/FELIX-**>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> 3761<http://issues.apache.org/**
>>>>>>>>>>>>>>>>> **********jira/**browse/FELIX-<http://issues.apache.org/**********jira/**browse/FELIX->
>>>>>>>>>>>>>>>>> **3761<http://issues.apache.**org/********jira/**browse/**
>>>>>>>>>>>>>>>>> FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <http://issues.apache.org/******
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/**********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>>> <**http://issues.apache.org/******<http://issues.apache.org/****>
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-**3761<http://issues.apache.org/
>>>>>>>>>>>>>>>>> **********jira/**browse/FELIX-**3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/****
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/******<http://issues.apache.org/****>
>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-**3761<http://issues.apache.org/
>>>>>>>>>>>>>>>>> ********jira/****browse/FELIX-**3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <http**s://issues.apache.org/***
>>>>>>>>>>>>>>>>> *********jira/**browse/FELIX-*<http://issues.apache.org/**********jira/**browse/FELIX-*>
>>>>>>>>>>>>>>>>> *3761<http://issues.apache.**org/********jira/**browse/**
>>>>>>>>>>>>>>>>> FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> <http://issues.apache.org/******
>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********
>>>>>>>>>>>>>>>>> jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <http**s://issues.apache.org/*****<http://issues.apache.org/***>
>>>>>>>>>>>>>>>>> *****jira/**browse/FELIX-3761<**
>>>>>>>>>>>>>>>>> http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <http**s://issues.apache.org/***
>>>>>>>>>>>>>>>>> *****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <http**s://issues.apache.org/***
>>>>>>>>>>>>>>>>> ***jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <http**s://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <http**s://issues.apache.org/**jira/**browse/FELIX-3761<https://issues.apache.org/**jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <https:/**/issues.apache.org/*****<http://issues.apache.org/***>
>>>>>>>>>>>>>>>>> *********jira/**browse/FELIX-******<
>>>>>>>>>>>>>>>>> http://issues.apache.org/************jira/**browse/FELIX-*
>>>>>>>>>>>>>>>>> ***<http://issues.apache.org/**********jira/**browse/FELIX-**>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> 3761<http://issues.apache.org/**
>>>>>>>>>>>>>>>>> **********jira/**browse/FELIX-<http://issues.apache.org/**********jira/**browse/FELIX->
>>>>>>>>>>>>>>>>> **3761<http://issues.apache.**org/********jira/**browse/**
>>>>>>>>>>>>>>>>> FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <http://issues.apache.org/******
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/**********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>>> <**http://issues.apache.org/******<http://issues.apache.org/****>
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-**3761<http://issues.apache.org/
>>>>>>>>>>>>>>>>> **********jira/**browse/FELIX-**3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/****
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/******<http://issues.apache.org/****>
>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-**3761<http://issues.apache.org/
>>>>>>>>>>>>>>>>> ********jira/****browse/FELIX-**3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <http**://issues.apache.org/******<http://issues.apache.org/****>
>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-**3761<http://issues.apache.org/
>>>>>>>>>>>>>>>>> ********jira/****browse/FELIX-**3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/******browse/FELIX-3761<http://issues.apache.org/****jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/****
>>>>>>>>>>>>>>>>> jira/******browse/FELIX-3761<http://issues.apache.org/**jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/**
>>>>>>>>>>>>>>>>> jira/********browse/FELIX-3761<http://issues.apache.org/jira/********browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> jira/******browse/FELIX-3761<http://issues.apache.org/**jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/********browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>> jira/******browse/FELIX-3761<http://issues.apache.org/**jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/********browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <https**://issues.apache.org/***
>>>>>>>>>>>>>>>>> *********jira/**browse/FELIX-*<http://issues.apache.org/**********jira/**browse/FELIX-*>
>>>>>>>>>>>>>>>>> *3761<http://issues.apache.**org/********jira/**browse/**
>>>>>>>>>>>>>>>>> FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <http://issues.apache.org/******
>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********
>>>>>>>>>>>>>>>>> jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> **jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <http**://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> **<http://issues.apache.org/******
>>>>>>>>>>>>>>>>> jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>> jira/******browse/FELIX-3761<http://issues.apache.org/**jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/********browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <https**://issues.apache.org/*****<http://issues.apache.org/***>
>>>>>>>>>>>>>>>>> *****jira/**browse/FELIX-3761<**
>>>>>>>>>>>>>>>>> http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>>>> ****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <http**://issues.apache.org/****
>>>>>>>>>>>>>>>>> **jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <https**://issues.apache.org/***
>>>>>>>>>>>>>>>>> *****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <http**://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <https**://issues.apache.org/***
>>>>>>>>>>>>>>>>> ***jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <http**://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <https**://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <http**://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> <https**://issues.apache.org/**jira/**browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3761<https://issues.apache.org/jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>> This avoid grabbing the bundle lock when registering a
>>>>>>>>>>>>>>>>> service,
>>>>>>>>>>>>>>>>> so
>>>>>>>>>>>>>>>>> maybe
>>>>>>>>>>>>>>>>> it will help your situation. You could try to build the
>>>>>>>>>>>>>>>>> framework
>>>>>>>>>>>>>>>>> from
>>>>>>>>>>>>>>>>> trunk and see if it makes a difference.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> If you aren't able to build from trunk, let me know and
>>>>>>>>>>>>>>>>> I'll
>>>>>>>>>>>>>>>>> try
>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>> publish a snapshot build since I don't think we have a
>>>>>>>>>>>>>>>>> recent
>>>>>>>>>>>>>>>>> one
>>>>>>>>>>>>>>>>> (we
>>>>>>>>>>>>>>>>> should do this no matter what).
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> -> richard
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>         If a refresh is happening in another thread, the
>>>>>>>>>>>>>>>>> refresh
>>>>>>>>>>>>>>>>> will
>>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>> holding
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>       the framework's global lock, which will then call
>>>>>>>>>>>>>>>>> IPOJO's
>>>>>>>>>>>>>>>>> extender,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>     which
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>   then attempts to call a method on InstanceCreator, hence
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> leading
>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>> deadlock.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Here are the stack traces:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Daemon Thread [Thread-1] (Suspended)
>>>>>>>>>>>>>>>>>> Object.wait(long) line: not available [native method]
>>>>>>>>>>>>>>>>>> Object[](Object).wait() line: 485
>>>>>>>>>>>>>>>>>> Felix.acquireBundleLock(******************BundleImpl,
>>>>>>>>>>>>>>>>>> int)
>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>> 4871
>>>>>>>>>>>>>>>>>> Felix.registerService(******************BundleImpl,
>>>>>>>>>>>>>>>>>> String[],
>>>>>>>>>>>>>>>>>> Object,
>>>>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>> 3205
>>>>>>>>>>>>>>>>>> BundleContextImpl.**************
>>>>>>>>>>>>>>>>>> ****registerService(String[],
>>>>>>>>>>>>>>>>>> Object,
>>>>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>> 346
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> IPojoContext.registerService(******************String[],
>>>>>>>>>>>>>>>>>> Object,
>>>>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>> 385
>>>>>>>>>>>>>>>>>> ProvidedService.******************registerService()
>>>>>>>>>>>>>>>>>> line: 362
>>>>>>>>>>>>>>>>>> ProvidedServiceHandler.__M_*******
>>>>>>>>>>>>>>>>>> ***********stateChanged(int)
>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>> 509
>>>>>>>>>>>>>>>>>> ProvidedServiceHandler.*********
>>>>>>>>>>>>>>>>>> *********stateChanged(int)
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> not
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> available
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> InstanceManager.setState(int) line: 536
>>>>>>>>>>>>>>>>>> InstanceManager.start() line: 418
>>>>>>>>>>>>>>>>>> ComponentFactory.***************
>>>>>>>>>>>>>>>>>> ***createInstance(Dictionary,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> IPojoContext,
>>>>>>>>>>>>>>>>>> HandlerManager[])
>>>>>>>>>>>>>>>>>> line: 179
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> ComponentFactory(IPojoFactory)******************.**
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>>>>>>>>> Dictionary,
>>>>>>>>>>>>>>>>>> ServiceContext) line: 310
>>>>>>>>>>>>>>>>>> ComponentFactory(IPojoFactory)******************.**
>>>>>>>>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>>>>> line: 239
>>>>>>>>>>>>>>>>>> InstanceCreator$******************
>>>>>>>>>>>>>>>>>> ManagedInstance.create(************
>>>>>>>>>>>>>>>>>> ******
>>>>>>>>>>>>>>>>>> IPojoFactory)
>>>>>>>>>>>>>>>>>> line: 355
>>>>>>>>>>>>>>>>>> InstanceCreator.addInstance(******************Dictionary,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> long)
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> line: 89
>>>>>>>>>>>>>>>>>> Extender.parse(Bundle, String) line: 306
>>>>>>>>>>>>>>>>>> Extender.startManagementFor(******************Bundle)
>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> 237
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Extender.access$600(Extender, Bundle) line: 52
>>>>>>>>>>>>>>>>>> Extender$CreatorThread.run() line: 769
>>>>>>>>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Daemon Thread [FelixFrameworkWiring] (Suspended)
>>>>>>>>>>>>>>>>>> InstanceCreator.******************
>>>>>>>>>>>>>>>>>> removeInstancesFromBundle(*********
>>>>>>>>>>>>>>>>>> *****
>>>>>>>>>>>>>>>>>> ****long)
>>>>>>>>>>>>>>>>>> line: 116
>>>>>>>>>>>>>>>>>> Extender.closeManagementFor(******************Bundle)
>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>> 171
>>>>>>>>>>>>>>>>>> Extender.bundleChanged(******************BundleEvent)
>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>> 153
>>>>>>>>>>>>>>>>>> EventDispatcher.******************
>>>>>>>>>>>>>>>>>> invokeBundleListenerCallback(******
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> ***
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> ****
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> *****Bundle,
>>>>>>>>>>>>>>>>>> EventListener,
>>>>>>>>>>>>>>>>>> EventObject) line: 868
>>>>>>>>>>>>>>>>>> EventDispatcher.******************
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> fireEventImmediately(********
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> EventDispatcher,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> int, Map,
>>>>>>>>>>>>>>>>>> EventObject, Dictionary) line: 789
>>>>>>>>>>>>>>>>>> EventDispatcher.******************
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> fireBundleEvent(BundleEvent,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Framework)
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> 514
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Felix.fireBundleEvent(int, Bundle) line: 4244
>>>>>>>>>>>>>>>>>> Felix.stopBundle(BundleImpl, boolean) line: 2351
>>>>>>>>>>>>>>>>>> Felix$RefreshHelper.stop() line: 4629
>>>>>>>>>>>>>>>>>> Felix.refreshPackages(******************Collection,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> FrameworkListener[])
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> 3951
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> FrameworkWiringImpl.run() line: 172
>>>>>>>>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>

Re: IPOJO initialization + refresh deadlock

Posted by "Richard S. Hall" <he...@ungoverned.org>.
On 1/1/13 13:14, Jad Naous wrote:
> On Tue, Jan 1, 2013 at 9:58 AM, Richard S. Hall <he...@ungoverned.org>wrote:
>
>> On 1/1/13 12:40, Jad Naous wrote:
>>
>>> On Tue, Jan 1, 2013 at 9:16 AM, Richard S. Hall <heavy@ungoverned.org
>>>> wrote:
>>>   On 1/1/13 11:51, Jad Naous wrote:
>>>>   On Tue, Jan 1, 2013 at 8:30 AM, Richard S. Hall <heavy@ungoverned.org
>>>>>> wrote:
>>>>>>
>>>>>    On 1/1/13 11:13, Jad Naous wrote:
>>>>>
>>>>>>    On Tue, Jan 1, 2013 at 7:58 AM, Richard S. Hall <
>>>>>> heavy@ungoverned.org
>>>>>>
>>>>>>> wrote:
>>>>>>>>      On 1/1/13 10:37, Jad Naous wrote:
>>>>>>>      On Tue, Jan 1, 2013 at 6:21 AM, Richard S. Hall<
>>>>>>>> heavy@ungoverned.org
>>>>>>>>
>>>>>>>>> **
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>      On 1/1/13 06:09, Jad Naous wrote:
>>>>>>>>>
>>>>>>>>>       Happy new year!
>>>>>>>>>
>>>>>>>>>>    I'm running into another deadlock now. It seems like there needs
>>>>>>>>>> to
>>>>>>>>>>
>>>>>>>>>>> be a
>>>>>>>>>>> more rigorous study of how locking is used in the framework. In
>>>>>>>>>>> particular,
>>>>>>>>>>> it seems like the framework should not be invoking any listeners
>>>>>>>>>>> within
>>>>>>>>>>> the
>>>>>>>>>>> same thread that's executing the stopping/starting/refreshing of
>>>>>>>>>>> bundles...
>>>>>>>>>>> Anywhere that happens there will be a potential for a deadlock
>>>>>>>>>>> because
>>>>>>>>>>> of
>>>>>>>>>>> a
>>>>>>>>>>> misordering of lock acquisition. The framework should never call
>>>>>>>>>>> into
>>>>>>>>>>> user
>>>>>>>>>>> code with any locks held.
>>>>>>>>>>>
>>>>>>>>>>>      Yeah, tell me about it, but it is not possible in all cases,
>>>>>>>>>>>
>>>>>>>>>>>    unfortunately. I personally feel that all events should be
>>>>>>>>>>>
>>>>>>>>>> asynchronous,
>>>>>>>>>> but that's another story.
>>>>>>>>>>
>>>>>>>>>> -> richard
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>      I'm happy to help fix this, but I need some pointers as to what
>>>>>>>>>> needs to
>>>>>>>>>>
>>>>>>>>>>    happen. For synchronous events, what are the requirements? Or is
>>>>>>>>>>
>>>>>>>>> this
>>>>>>>>> not
>>>>>>>>> fixable? Can the lock be released before firing the events?
>>>>>>>>>
>>>>>>>>>     I don't think it can be fixed, some of these things are baked
>>>>>>>>> into
>>>>>>>>> the
>>>>>>>>>
>>>>>>>>>   spec. I think the spec even states somewhere that synchronous event
>>>>>>>> listeners must be careful since they may be holding framework locks,
>>>>>>>> so
>>>>>>>> they shouldn't try to do too much. Of course, that is not easy advice
>>>>>>>> to
>>>>>>>> follow since framework impls vary.
>>>>>>>>
>>>>>>>> We even have bugs open that say we aren't holding locks when we
>>>>>>>> should
>>>>>>>> be,
>>>>>>>> e.g.:
>>>>>>>>
>>>>>>>>         https://issues.apache.org/********jira/browse/FELIX-3806<https://issues.apache.org/******jira/browse/FELIX-3806>
>>>>>>>> <https**://issues.apache.org/****jira/**browse/FELIX-3806<https://issues.apache.org/****jira/browse/FELIX-3806>
>>>>>>>> <https:/**/issues.apache.org/****jira/**browse/FELIX-3806<http://issues.apache.org/**jira/**browse/FELIX-3806>
>>>>>>>> <http**s://issues.apache.org/**jira/**browse/FELIX-3806<https://issues.apache.org/**jira/browse/FELIX-3806>
>>>>>>>> <https:/**/issues.apache.org/****jira/**browse/FELIX-3806<http://issues.apache.org/**jira/**browse/FELIX-3806>
>>>>>>>> <http**://issues.apache.org/jira/****browse/FELIX-3806<http://issues.apache.org/jira/**browse/FELIX-3806>
>>>>>>>> <https**://issues.apache.org/**jira/**browse/FELIX-3806<http://issues.apache.org/jira/**browse/FELIX-3806>
>>>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3806<https://issues.apache.org/jira/browse/FELIX-3806>
>>>>>>>>
>>>>>>>> This is one of the poorly designed parts of the OSGi spec. It was
>>>>>>>> meant
>>>>>>>> to
>>>>>>>> work in a world were services can "come and go at anytime", but it
>>>>>>>> allows
>>>>>>>> users to clings to synchronous events to do tons of work.
>>>>>>>>
>>>>>>>>     Then I guess this is something that ipojo is doing incorrectly?
>>>>>>>>
>>>>>>>>   Hard for me to say, but if there is a case where we can fire events
>>>>>> without holding locks, then you are correct in saying that we should
>>>>>> try
>>>>>> to
>>>>>> avoid doing so. Likewise, users should avoid doing too much when they
>>>>>> receive synchronous events.
>>>>>>
>>>>>>    Well, iPOJO is not doing anything. It is just loading a class, and
>>>>>>
>>>>> that's
>>>>> what's causing the global lock to be acquired.
>>>>>
>>>>>   You're really going to make me look into this, aren't you? ;-)
>>>>
>>>>   :) Thanks from me and the tons of other people using this framework!
>>>
>>>   I'm not sure what is going on, but for whatever reason you are in the
>>>> middle of a refresh (which requires global lock) while it appears that
>>>> iPOJO is starting to manage a new bundle, which ultimately results in
>>>> someone trying to do a dynamic import (which also requires global lock).
>>>>
>>>> There isn't much we can do in this case other than try to detect it and
>>>> fail for the global lock acquire...
>>>>
>>>>   And ipojo will have to deal... Seems simpler if ipojo didn't try to
>>> unregister services or do that sort of thing (or at least not acquire any
>>> locks of its own) synchronously.
>>>
>> iPOJO doesn't appear to be doing anything synchronously here. It looks
>> like it is working on another thread to start management of a perhaps newly
>> installed or updated bundle. The issue actually arises because the
>> framework instigates a dynamic import when trying to determine if it should
>> deliver the event to a service listener (it needs to try to load classes in
>> some cases to see if the service's class is compatible with the listener's
>> service class).
>>
>> This is really ugly. Not really sure what we could do here other than
>> always fail service event delivery if the listener bundle doesn't already
>> have access to the service class. But that would still be complicated to do
>> and would lead to other failure scenarios.
>>
>> I'd have to think about that one.
>>
>>
> That's in one thread. In the other, the framework calls stopBundle() and
> ipojo is reacting to that be calling InstanceCreator.removeFactory(), and
> this is the guy that grabs the other lock. If ipojo instead either doesn't
> grab the lock or pushes the work somewhere else, this ugly mess goes away...

Well, the strange thing for me is that iPOJO is trying start managing 
the same bundle that the framework is trying to stop, effectively iPOJO 
is trying to start and stop managing the same bundle.

In this case, you are correct in that iPOJO should also not hold its own 
locks while calling into the framework, since that resulted in a 
callback into iPOJO for the same lock, but on a different thread.

-> richard

>
>
>> -> richard
>>
>>
>>>   -> richard
>>>>
>>>>     -> richard
>>>>>>      -> richard
>>>>>>
>>>>>>>       Name: Thread-2
>>>>>>>>   State: WAITING on [Ljava.lang.Object;@4a018e1b
>>>>>>>>>> Total blocked: 38,871,649  Total waited: 38,871,650
>>>>>>>>>>> Stack trace:
>>>>>>>>>>>        java.lang.Object.wait(Native Method)
>>>>>>>>>>> java.lang.Object.wait(Object.**********java:485)
>>>>>>>>>>> org.apache.felix.framework.**********Felix.acquireGlobalLock(***
>>>>>>>>>>> ***
>>>>>>>>>>> Felix.**
>>>>>>>>>>> **java:5033)
>>>>>>>>>>> org.apache.felix.framework.**********StatefulResolver.resolve(**
>>>>>>>>>>> **
>>>>>>>>>>> StatefulResolver.java:451)
>>>>>>>>>>> org.apache.felix.framework.**********BundleWiringImpl.****
>>>>>>>>>>> searchDynamicImports(**
>>>>>>>>>>> BundleWiringImpl.java:1578)
>>>>>>>>>>> org.apache.felix.framework.**********BundleWiringImpl.**
>>>>>>>>>>> findClassOrResourceByDelegatio**********n(BundleWiringImpl.**
>>>>>>>>>>> java:**
>>>>>>>>>>> ****1478)
>>>>>>>>>>> org.apache.felix.framework.**********BundleWiringImpl.access$****
>>>>>>>>>>> 400(****
>>>>>>>>>>> BundleWiringImpl.java:75)
>>>>>>>>>>> org.apache.felix.framework.**********BundleWiringImpl$**
>>>>>>>>>>> BundleClassLoader.loadClass(**********BundleWiringImpl.java:****
>>>>>>>>>>> 1882)
>>>>>>>>>>> java.lang.ClassLoader.**********loadClass(ClassLoader.java:*****
>>>>>>>>>>> **
>>>>>>>>>>> ***247)
>>>>>>>>>>> org.apache.felix.framework.**********BundleWiringImpl.****
>>>>>>>>>>> getClassByDelegation(**
>>>>>>>>>>> BundleWiringImpl.java:1356)
>>>>>>>>>>> org.apache.felix.framework.**********ServiceRegistrationImpl$****
>>>>>>>>>>> ServiceReferenceImpl.**********isAssignableTo(****
>>>>>>>>>>> ServiceRegistrationImpl.java:**********
>>>>>>>>>>> 548)
>>>>>>>>>>> org.apache.felix.framework.**********util.Util.****
>>>>>>>>>>> isServiceAssignable(****
>>>>>>>>>>> Util.java:280)
>>>>>>>>>>> org.apache.felix.framework.**********util.EventDispatcher.**
>>>>>>>>>>> invokeServiceListenerCallback(**********EventDispatcher.java:***
>>>>>>>>>>> *916)
>>>>>>>>>>> org.apache.felix.framework.**********util.EventDispatcher.****
>>>>>>>>>>> fireEventImmediately(
>>>>>>>>>>> **EventDispatcher.java:793)
>>>>>>>>>>> org.apache.felix.framework.**********util.EventDispatcher.****
>>>>>>>>>>> fireServiceEvent(**
>>>>>>>>>>> EventDispatcher.java:543)
>>>>>>>>>>> org.apache.felix.framework.**********Felix.fireServiceEvent(**
>>>>>>>>>>> Felix.*****
>>>>>>>>>>> *java:4346)
>>>>>>>>>>> org.apache.felix.framework.**********Felix.registerService(**
>>>>>>>>>>> Felix.******
>>>>>>>>>>> java:3356)
>>>>>>>>>>> org.apache.felix.framework.**********BundleContextImpl.******
>>>>>>>>>>> registerService(**
>>>>>>>>>>> BundleContextImpl.java:346)
>>>>>>>>>>> org.apache.felix.ipojo.**********IPojoFactory.start(****
>>>>>>>>>>> IPojoFactory.java:613)
>>>>>>>>>>>          - locked org.apache.felix.ipojo.**********
>>>>>>>>>>> ComponentFactory@468034b6
>>>>>>>>>>> org.apache.felix.ipojo.**********Extender.********
>>>>>>>>>>> createAbstractFactory(**
>>>>>>>>>>> Extender.java:520)
>>>>>>>>>>> org.apache.felix.ipojo.**********Extender.parse(Extender.java:**
>>>>>>>>>>> ***
>>>>>>>>>>> *****301)
>>>>>>>>>>> org.apache.felix.ipojo.**********Extender.startManagementFor(***
>>>>>>>>>>> *******
>>>>>>>>>>> Extender.java:237)
>>>>>>>>>>> org.apache.felix.ipojo.**********Extender.access$600(Extender.**
>>>>>>>>>>> *****
>>>>>>>>>>> ***java:52)
>>>>>>>>>>> org.apache.felix.ipojo.**********Extender$CreatorThread.run(****
>>>>>>>>>>> ******
>>>>>>>>>>> Extender.java:769)
>>>>>>>>>>> java.lang.Thread.run(Thread.**********java:662)
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Name: FelixFrameworkWiring
>>>>>>>>>>> State: BLOCKED on org.apache.felix.ipojo.****
>>>>>>>>>>>
>>>>>>>>>>> ComponentFactory@468034b6owned
>>>>>>>>>>>
>>>>>>>>>>> by: Thread-2
>>>>>>>>>>> Total blocked: 7  Total waited: 1
>>>>>>>>>>>
>>>>>>>>>>> Stack trace:
>>>>>>>>>>>        org.apache.felix.ipojo.**********IPojoFactory.****
>>>>>>>>>>> removeFactoryStateListener(**
>>>>>>>>>>> IPojoFactory.java:511)
>>>>>>>>>>> org.apache.felix.ipojo.**********InstanceCreator.**
>>>>>>>>>>> removeFactory(**
>>>>>>>>>>> ******
>>>>>>>>>>> InstanceCreator.java:199)
>>>>>>>>>>> org.apache.felix.ipojo.**********Extender.closeManagementFor(***
>>>>>>>>>>> *******
>>>>>>>>>>> Extender.java:180)
>>>>>>>>>>> org.apache.felix.ipojo.**********Extender.bundleChanged(****
>>>>>>>>>>> Extender.java:153)
>>>>>>>>>>> org.apache.felix.framework.**********util.EventDispatcher.**
>>>>>>>>>>> invokeBundleListenerCallback(**********EventDispatcher.java:**
>>>>>>>>>>> 868)
>>>>>>>>>>> org.apache.felix.framework.**********util.EventDispatcher.****
>>>>>>>>>>> fireEventImmediately(
>>>>>>>>>>> **EventDispatcher.java:789)
>>>>>>>>>>> org.apache.felix.framework.**********util.EventDispatcher.****
>>>>>>>>>>> fireBundleEvent(**
>>>>>>>>>>> EventDispatcher.java:514)
>>>>>>>>>>> org.apache.felix.framework.**********Felix.fireBundleEvent(**
>>>>>>>>>>> Felix.******
>>>>>>>>>>> java:4330)
>>>>>>>>>>> org.apache.felix.framework.**********Felix.stopBundle(Felix.**
>>>>>>>>>>> java:***
>>>>>>>>>>> ***2451)
>>>>>>>>>>> org.apache.felix.framework.**********Felix$RefreshHelper.stop(**
>>>>>>>>>>> ******
>>>>>>>>>>> Felix.java:4715)
>>>>>>>>>>> org.apache.felix.framework.**********Felix.refreshPackages(**
>>>>>>>>>>> Felix.******
>>>>>>>>>>> java:4037)
>>>>>>>>>>> org.apache.felix.framework.**********FrameworkWiringImpl.run(****
>>>>>>>>>>> FrameworkWiringImpl.java:178)
>>>>>>>>>>> java.lang.Thread.run(Thread.**********java:662)
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Sat, Dec 22, 2012 at 6:39 PM, Richard S. Hall <
>>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>>
>>>>>>>>>>>     wrote:
>>>>>>>>>>>
>>>>>>>>>>>         On 12/22/12 20:41 , Jad Naous wrote:
>>>>>>>>>>>>         Thanks! I was building with java6. Don't know if that is
>>>>>>>>>>> the
>>>>>>>>>>>
>>>>>>>>>>>   issue.
>>>>>>>>>>>>     Anyway,
>>>>>>>>>>>>
>>>>>>>>>>>>   I tested the snapshot, and looks like that fixes it.
>>>>>>>>>>>>> Any idea when 4.1.0 will be released? Do you know if
>>>>>>>>>>>>> http://svn.apache.org/viewvc?************view=revision&**
>>>>>>>>>>>>> revision=**<http://svn.apache.org/viewvc?**********view=revision&revision=**>
>>>>>>>>>>>>> ****<http://svn.apache.org/**viewvc?********view=revision&**
>>>>>>>>>>>>> revision=****<http://svn.apache.org/viewvc?********view=revision&revision=****>
>>>>>>>>>>>>> **1421958<http://svn.apache.****org/viewvc?******view=**
>>>>>>>>>>>>> revision&revision=****1421958<**http://svn.apache.org/viewvc?**
>>>>>>>>>>>>> ******view=revision&revision=******1421958<http://svn.apache.org/viewvc?******view=revision&revision=****1421958>
>>>>>>>>>>>>> <http://svn.apache.**org/****viewvc?****view=revision&**
>>>>>>>>>>>>> revision=**1421958<http://svn.****apache.org/viewvc?****view=**
>>>>>>>>>>>>> ** <http://apache.org/viewvc?****view=**>
>>>>>>>>>>>>> revision&revision=**1421958<ht**tp://svn.apache.org/viewvc?****
>>>>>>>>>>>>> **view=revision&revision=****1421958<http://svn.apache.org/viewvc?****view=revision&revision=**1421958>
>>>>>>>>>>>>> <http://svn.apache.org/********viewvc?**view=revision&****<http://svn.apache.org/******viewvc?**view=revision&****>
>>>>>>>>>>>>> <ht**tp://svn.apache.org/******viewvc?**view=revision&****<http://svn.apache.org/****viewvc?**view=revision&****>
>>>>>>>>>>>>> revision=1421958<http://svn.****apache.org/**viewvc?**view=**<http://apache.org/**viewvc?**view=**>
>>>>>>>>>>>>> revision&**revision=1421958<ht**tp://svn.apache.org/**viewvc?**
>>>>>>>>>>>>> **view=revision&**revision=**1421958<http://svn.apache.org/**viewvc?**view=revision&**revision=1421958>
>>>>>>>>>>>>> <http://svn.**apache.org/****viewvc?**view=**revision&**<http://apache.org/**viewvc?**view=**revision&**>
>>>>>>>>>>>>> revision=1421958<http://**apache.org/viewvc?**view=****
>>>>>>>>>>>>> revision&revision=1421958<http://apache.org/viewvc?**view=**revision&revision=1421958>
>>>>>>>>>>>>> <http://svn.**apache.org/**viewvc?**view=**<http://apache.org/viewvc?**view=**>
>>>>>>>>>>>>> revision&revision=1421958<http**://svn.apache.org/viewvc?****
>>>>>>>>>>>>> view=revision&revision=1421958<http://svn.apache.org/viewvc?**view=revision&revision=1421958>
>>>>>>>>>>>>> **>
>>>>>>>>>>>>> <http://svn.apache.org/**********viewvc?view=revision&**
>>>>>>>>>>>>> revision=****<http://svn.apache.org/********viewvc?view=revision&revision=****>
>>>>>>>>>>>>> <http://svn.**apache.org/******viewvc?view=**
>>>>>>>>>>>>> revision&revision=**<http://svn.apache.org/******viewvc?view=revision&revision=**>
>>>>>>>>>>>>> ****1421958<http://svn.apache.****org/****viewvc?view=**
>>>>>>>>>>>>> revision&**
>>>>>>>>>>>>> revision=****1421958<http://**svn.apache.org/****viewvc?**
>>>>>>>>>>>>> view=revision&revision=******1421958<http://svn.apache.org/****viewvc?view=revision&revision=****1421958>
>>>>>>>>>>>>> <http://svn.apache.**org/******viewvc?view=revision&**
>>>>>>>>>>>>> revision=**1421958<http://svn.****apache.org/**viewvc?view=**
>>>>>>>>>>>>> revision&revision=**1421958<ht**tp://svn.apache.org/**viewvc?**
>>>>>>>>>>>>> view=revision&revision=****1421958<http://svn.apache.org/**viewvc?view=revision&revision=**1421958>
>>>>>>>>>>>>> <http://svn.apache.**org/******viewvc?view=revision&****
>>>>>>>>>>>>> revision=1421958<http://svn.******apache.org/viewvc?view=**<ht*
>>>>>>>>>>>>> *tp://apache.org/viewvc?view=**<http://apache.org/viewvc?view=**>
>>>>>>>>>>>>> **>
>>>>>>>>>>>>> revision&revision=1421958<**http**://svn.apache.org/**
>>>>>>>>>>>>> viewvc?view=** <http://svn.apache.org/viewvc?view=**>
>>>>>>>>>>>>>
>>>>>>>>>>>>> revision&revision=1421958<http**://svn.apache.org/viewvc?view=*
>>>>>>>>>>>>> *revision&revision=1421958<http://svn.apache.org/viewvc?view=revision&revision=1421958>
>>>>>>>>>>>>>     will
>>>>>>>>>>>>>
>>>>>>>>>>>>>   apply
>>>>>>>>>>>>>>   cleanly onto 4.0.3? Otherwise, how stable do you think is
>>>>>>>>>>>>> 4.1.0-SNAPSHOT?
>>>>>>>>>>>>>
>>>>>>>>>>>>>       The release version will be 4.2.0, but the 4.1.0-SNAPSHOT
>>>>>>>>>>>>> build
>>>>>>>>>>>>> should
>>>>>>>>>>>>>
>>>>>>>>>>>>>     be
>>>>>>>>>>>>>
>>>>>>>>>>>>>   reasonably stable. We try to keep trunk stable.
>>>>>>>>>>>> I want to try to get a release out soon, but I don't have a
>>>>>>>>>>>> specific
>>>>>>>>>>>> time
>>>>>>>>>>>> table. I'll try to get in done in January if all goes well.
>>>>>>>>>>>>
>>>>>>>>>>>> -> richard
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>       Thanks!
>>>>>>>>>>>>
>>>>>>>>>>>>     Jad.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>> On Fri, Dec 21, 2012 at 6:49 AM, Richard S. Hall <
>>>>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>>>>
>>>>>>>>>>>>>      wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>          It built fine for me. I'm was building with Java 7.
>>>>>>>>>>>>>
>>>>>>>>>>>>>>       Regardless, I deployed snapshots of framework, main, and
>>>>>>>>>>>>>>
>>>>>>>>>>>>>    main.distribution, so just grab what you want from the Apache
>>>>>>>>>>>>>
>>>>>>>>>>>>>> snapshot
>>>>>>>>>>>>>> repo
>>>>>>>>>>>>>> to try it out.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -> richard
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On 12/20/12 18:56 , Jad Naous wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>        It does look like the same issue.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>      Got the trunk/framework. mvn clean install gives:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>    [INFO] --- maven-compiler-plugin:2.3.2:**************compile
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> (default-compile) @
>>>>>>>>>>>>>>> org.apache.felix.framework ---
>>>>>>>>>>>>>>> Dec 20, 2012 3:54:59 PM org.sonatype.guice.bean.****
>>>>>>>>>>>>>>> reflect.Logs$JULSink
>>>>>>>>>>>>>>> warn
>>>>>>>>>>>>>>> WARNING: Error injecting: org.apache.maven.plugin.********
>>>>>>>>>>>>>>> ******
>>>>>>>>>>>>>>> CompilerMojo
>>>>>>>>>>>>>>> java.lang.**************NoClassDefFoundError:
>>>>>>>>>>>>>>> org/codehaus/plexus/compiler/**************util/scan/******
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> InclusionScanException
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>> jad.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Thu, Dec 20, 2012 at 3:22 PM, Richard S. Hall <
>>>>>>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>       wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>           On 12/20/12 4:10 PM, Jad Naous wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>            If a bundle undergoes a refresh while ipojo is still
>>>>>>>>>>>>>>>>   initializing
>>>>>>>>>>>>>>>        components, a deadlock can happen.  The issue is that if
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>   ipojo is
>>>>>>>>>>>>>>>>     attempting to register a service, it will be doing it
>>>>>>>>>>>>>>>> while
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>   synchronizing
>>>>>>>>>>>>>>>>> on the InstanceCreator instance. It will then try to
>>>>>>>>>>>>>>>>> register
>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>> service
>>>>>>>>>>>>>>>>> which requires the framework's global lock.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>         Registering a service doesn't require a global, just
>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>> bundle
>>>>>>>>>>>>>>>>> lock.
>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>       think this could be related to:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>              https://issues.apache.org/**********<https://issues.apache.org/********>
>>>>>>>>>>>>>>>>> <https://issues.apache.**org/******<https://issues.apache.org/******>
>>>>>>>>>>>>>>>>>   ******jira/browse/FELIX-3761<**h**ttps://
>>>>>>>>>>>>>>>> issues.apache.org/******* <http://issues.apache.org/*****>
>>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<**
>>>>>>>>>>>>>>>> https://issues.apache.org/************jira/browse/FELIX-3761<https://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttps://issues.apache.org/***
>>>>>>>>>>>>>>>> ***********jira/browse/FELIX-****<http://issues.apache.org/************jira/browse/FELIX-**>
>>>>>>>>>>>>>>>> 3761<http://issues.apache.org/************jira/browse/FELIX-
>>>>>>>>>>>>>>>> **3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <https://issues.apache.**org/**********jira/browse/FELIX-***
>>>>>>>>>>>>>>>> *3761<https://issues.apache.**org/********jira/browse/FELIX-
>>>>>>>>>>>>>>>> **3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**ps://issues.apache.org/***
>>>>>>>>>>>>>>>> ***********jira/browse/FELIX-****<http://issues.apache.org/************jira/browse/FELIX-**>
>>>>>>>>>>>>>>>> 3761<http://issues.apache.org/************jira/browse/FELIX-
>>>>>>>>>>>>>>>> **3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http://issues.apache.org/************jira/browse/FELIX-3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/**********jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>> <**https://issues.apache.org/************jira/browse/FELIX-*
>>>>>>>>>>>>>>>> *3761<https://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <https://issues.apache.**org/********jira/browse/FELIX-**
>>>>>>>>>>>>>>>> 3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <**https://issues.apache.org/***
>>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <**https://issues.apache.org/********jira/browse/FELIX-3761<https://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <https**://issues.apache.org/***
>>>>>>>>>>>>>>>> *********jira/**browse/FELIX-****<http://issues.apache.org/**********jira/**browse/FELIX-**>
>>>>>>>>>>>>>>>> 3761<http://issues.apache.org/**********jira/**browse/FELIX-
>>>>>>>>>>>>>>>> **3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http://issues.apache.org/**********jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> **<http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/************jira/browse/FELIX-*
>>>>>>>>>>>>>>>> *3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http://issues.apache.org/**********jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>> <**http://issues.apache.org/**********jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/***
>>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <**http://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/******jira/browse/FELIX-3761<https://issues.apache.org/****jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <https:/**/issues.apache.org/***
>>>>>>>>>>>>>>>> *********jira/**browse/FELIX-****<http://issues.apache.org/**********jira/**browse/FELIX-**>
>>>>>>>>>>>>>>>> 3761<http://issues.apache.org/**********jira/**browse/FELIX-
>>>>>>>>>>>>>>>> **3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http://issues.apache.org/**********jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> **<http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****
>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> **<http://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http**s://issues.apache.org/**********jira/**browse/FELIX-*
>>>>>>>>>>>>>>>> *3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>> <**http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http**s://issues.apache.org/***
>>>>>>>>>>>>>>>> *****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http**s://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http**s://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http**s://issues.apache.org/**jira/**browse/FELIX-3761<https://issues.apache.org/**jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> <https:/**/issues.apache.org/***
>>>>>>>>>>>>>>>> *********jira/**browse/FELIX-****<http://issues.apache.org/**********jira/**browse/FELIX-**>
>>>>>>>>>>>>>>>> 3761<http://issues.apache.org/**********jira/**browse/FELIX-
>>>>>>>>>>>>>>>> **3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http://issues.apache.org/**********jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> **<http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****
>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> **<http://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http**://issues.apache.org/****
>>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> **<http://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/******browse/FELIX-3761<http://issues.apache.org/**jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/********browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <https**://issues.apache.org/**********jira/**browse/FELIX-*
>>>>>>>>>>>>>>>> *3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>>> <**http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http**://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <https**://issues.apache.org/***
>>>>>>>>>>>>>>>> *****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http**://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <https**://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http**://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <https**://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <http**://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <https**://issues.apache.org/**jira/**browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3761<https://issues.apache.org/jira/browse/FELIX-3761>
>>>>>>>>>>>>>>>> This avoid grabbing the bundle lock when registering a
>>>>>>>>>>>>>>>> service,
>>>>>>>>>>>>>>>> so
>>>>>>>>>>>>>>>> maybe
>>>>>>>>>>>>>>>> it will help your situation. You could try to build the
>>>>>>>>>>>>>>>> framework
>>>>>>>>>>>>>>>> from
>>>>>>>>>>>>>>>> trunk and see if it makes a difference.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> If you aren't able to build from trunk, let me know and I'll
>>>>>>>>>>>>>>>> try
>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>> publish a snapshot build since I don't think we have a recent
>>>>>>>>>>>>>>>> one
>>>>>>>>>>>>>>>> (we
>>>>>>>>>>>>>>>> should do this no matter what).
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> -> richard
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>         If a refresh is happening in another thread, the
>>>>>>>>>>>>>>>> refresh
>>>>>>>>>>>>>>>> will
>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>> holding
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>       the framework's global lock, which will then call
>>>>>>>>>>>>>>>> IPOJO's
>>>>>>>>>>>>>>>> extender,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>     which
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>   then attempts to call a method on InstanceCreator, hence
>>>>>>>>>>>>>>>>> leading
>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> deadlock.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Here are the stack traces:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Daemon Thread [Thread-1] (Suspended)
>>>>>>>>>>>>>>>>> Object.wait(long) line: not available [native method]
>>>>>>>>>>>>>>>>> Object[](Object).wait() line: 485
>>>>>>>>>>>>>>>>> Felix.acquireBundleLock(****************BundleImpl, int)
>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>> 4871
>>>>>>>>>>>>>>>>> Felix.registerService(****************BundleImpl, String[],
>>>>>>>>>>>>>>>>> Object,
>>>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>> 3205
>>>>>>>>>>>>>>>>> BundleContextImpl.****************registerService(String[],
>>>>>>>>>>>>>>>>> Object,
>>>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>> 346
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> IPojoContext.registerService(****************String[],
>>>>>>>>>>>>>>>>> Object,
>>>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>> 385
>>>>>>>>>>>>>>>>> ProvidedService.****************registerService() line: 362
>>>>>>>>>>>>>>>>> ProvidedServiceHandler.__M_*****
>>>>>>>>>>>>>>>>> ***********stateChanged(int)
>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>> 509
>>>>>>>>>>>>>>>>> ProvidedServiceHandler.****************stateChanged(int)
>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> not
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> available
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> InstanceManager.setState(int) line: 536
>>>>>>>>>>>>>>>>> InstanceManager.start() line: 418
>>>>>>>>>>>>>>>>> ComponentFactory.****************createInstance(Dictionary,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> IPojoContext,
>>>>>>>>>>>>>>>>> HandlerManager[])
>>>>>>>>>>>>>>>>> line: 179
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> ComponentFactory(IPojoFactory)****************.**
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>>>>>>>> Dictionary,
>>>>>>>>>>>>>>>>> ServiceContext) line: 310
>>>>>>>>>>>>>>>>> ComponentFactory(IPojoFactory)****************.**
>>>>>>>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>>>> line: 239
>>>>>>>>>>>>>>>>> InstanceCreator$****************
>>>>>>>>>>>>>>>>> ManagedInstance.create(**********
>>>>>>>>>>>>>>>>> ******
>>>>>>>>>>>>>>>>> IPojoFactory)
>>>>>>>>>>>>>>>>> line: 355
>>>>>>>>>>>>>>>>> InstanceCreator.addInstance(****************Dictionary,
>>>>>>>>>>>>>>>>> long)
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> line: 89
>>>>>>>>>>>>>>>>> Extender.parse(Bundle, String) line: 306
>>>>>>>>>>>>>>>>> Extender.startManagementFor(****************Bundle) line:
>>>>>>>>>>>>>>>>> 237
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Extender.access$600(Extender, Bundle) line: 52
>>>>>>>>>>>>>>>>> Extender$CreatorThread.run() line: 769
>>>>>>>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Daemon Thread [FelixFrameworkWiring] (Suspended)
>>>>>>>>>>>>>>>>> InstanceCreator.****************
>>>>>>>>>>>>>>>>> removeInstancesFromBundle(*******
>>>>>>>>>>>>>>>>> *****
>>>>>>>>>>>>>>>>> ****long)
>>>>>>>>>>>>>>>>> line: 116
>>>>>>>>>>>>>>>>> Extender.closeManagementFor(****************Bundle) line:
>>>>>>>>>>>>>>>>> 171
>>>>>>>>>>>>>>>>> Extender.bundleChanged(****************BundleEvent) line:
>>>>>>>>>>>>>>>>> 153
>>>>>>>>>>>>>>>>> EventDispatcher.****************
>>>>>>>>>>>>>>>>> invokeBundleListenerCallback(****
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> ***
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> ****
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> *****Bundle,
>>>>>>>>>>>>>>>>> EventListener,
>>>>>>>>>>>>>>>>> EventObject) line: 868
>>>>>>>>>>>>>>>>> EventDispatcher.****************
>>>>>>>>>>>>>>>>> fireEventImmediately(********
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> EventDispatcher,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> int, Map,
>>>>>>>>>>>>>>>>> EventObject, Dictionary) line: 789
>>>>>>>>>>>>>>>>> EventDispatcher.****************
>>>>>>>>>>>>>>>>> fireBundleEvent(BundleEvent,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Framework)
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> 514
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Felix.fireBundleEvent(int, Bundle) line: 4244
>>>>>>>>>>>>>>>>> Felix.stopBundle(BundleImpl, boolean) line: 2351
>>>>>>>>>>>>>>>>> Felix$RefreshHelper.stop() line: 4629
>>>>>>>>>>>>>>>>> Felix.refreshPackages(****************Collection,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> FrameworkListener[])
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> 3951
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> FrameworkWiringImpl.run() line: 172
>>>>>>>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>


Re: IPOJO initialization + refresh deadlock

Posted by Jad Naous <ja...@nerati.com>.
On Tue, Jan 1, 2013 at 9:58 AM, Richard S. Hall <he...@ungoverned.org>wrote:

> On 1/1/13 12:40, Jad Naous wrote:
>
>> On Tue, Jan 1, 2013 at 9:16 AM, Richard S. Hall <heavy@ungoverned.org
>> >wrote:
>>
>>  On 1/1/13 11:51, Jad Naous wrote:
>>>
>>>  On Tue, Jan 1, 2013 at 8:30 AM, Richard S. Hall <heavy@ungoverned.org
>>>>
>>>>> wrote:
>>>>>
>>>>   On 1/1/13 11:13, Jad Naous wrote:
>>>>
>>>>>   On Tue, Jan 1, 2013 at 7:58 AM, Richard S. Hall <
>>>>> heavy@ungoverned.org
>>>>>
>>>>>> wrote:
>>>>>>>
>>>>>>>     On 1/1/13 10:37, Jad Naous wrote:
>>>>>>
>>>>>>     On Tue, Jan 1, 2013 at 6:21 AM, Richard S. Hall<
>>>>>>> heavy@ungoverned.org
>>>>>>>
>>>>>>>> **
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>     On 1/1/13 06:09, Jad Naous wrote:
>>>>>>>>
>>>>>>>>      Happy new year!
>>>>>>>>
>>>>>>>>>   I'm running into another deadlock now. It seems like there needs
>>>>>>>>> to
>>>>>>>>>
>>>>>>>>>> be a
>>>>>>>>>> more rigorous study of how locking is used in the framework. In
>>>>>>>>>> particular,
>>>>>>>>>> it seems like the framework should not be invoking any listeners
>>>>>>>>>> within
>>>>>>>>>> the
>>>>>>>>>> same thread that's executing the stopping/starting/refreshing of
>>>>>>>>>> bundles...
>>>>>>>>>> Anywhere that happens there will be a potential for a deadlock
>>>>>>>>>> because
>>>>>>>>>> of
>>>>>>>>>> a
>>>>>>>>>> misordering of lock acquisition. The framework should never call
>>>>>>>>>> into
>>>>>>>>>> user
>>>>>>>>>> code with any locks held.
>>>>>>>>>>
>>>>>>>>>>     Yeah, tell me about it, but it is not possible in all cases,
>>>>>>>>>>
>>>>>>>>>>   unfortunately. I personally feel that all events should be
>>>>>>>>>>
>>>>>>>>> asynchronous,
>>>>>>>>> but that's another story.
>>>>>>>>>
>>>>>>>>> -> richard
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>     I'm happy to help fix this, but I need some pointers as to what
>>>>>>>>> needs to
>>>>>>>>>
>>>>>>>>>   happen. For synchronous events, what are the requirements? Or is
>>>>>>>>>
>>>>>>>> this
>>>>>>>> not
>>>>>>>> fixable? Can the lock be released before firing the events?
>>>>>>>>
>>>>>>>>    I don't think it can be fixed, some of these things are baked
>>>>>>>> into
>>>>>>>> the
>>>>>>>>
>>>>>>>>  spec. I think the spec even states somewhere that synchronous event
>>>>>>> listeners must be careful since they may be holding framework locks,
>>>>>>> so
>>>>>>> they shouldn't try to do too much. Of course, that is not easy advice
>>>>>>> to
>>>>>>> follow since framework impls vary.
>>>>>>>
>>>>>>> We even have bugs open that say we aren't holding locks when we
>>>>>>> should
>>>>>>> be,
>>>>>>> e.g.:
>>>>>>>
>>>>>>>        https://issues.apache.org/********jira/browse/FELIX-3806<https://issues.apache.org/******jira/browse/FELIX-3806>
>>>>>>> <https**://issues.apache.org/****jira/**browse/FELIX-3806<https://issues.apache.org/****jira/browse/FELIX-3806>
>>>>>>> >
>>>>>>> <https:/**/issues.apache.org/****jira/**browse/FELIX-3806<http://issues.apache.org/**jira/**browse/FELIX-3806>
>>>>>>> <http**s://issues.apache.org/**jira/**browse/FELIX-3806<https://issues.apache.org/**jira/browse/FELIX-3806>
>>>>>>> >
>>>>>>> <https:/**/issues.apache.org/****jira/**browse/FELIX-3806<http://issues.apache.org/**jira/**browse/FELIX-3806>
>>>>>>> <http**://issues.apache.org/jira/****browse/FELIX-3806<http://issues.apache.org/jira/**browse/FELIX-3806>
>>>>>>> >
>>>>>>> <https**://issues.apache.org/**jira/**browse/FELIX-3806<http://issues.apache.org/jira/**browse/FELIX-3806>
>>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3806<https://issues.apache.org/jira/browse/FELIX-3806>
>>>>>>> >
>>>>>>>
>>>>>>>
>>>>>>> This is one of the poorly designed parts of the OSGi spec. It was
>>>>>>> meant
>>>>>>> to
>>>>>>> work in a world were services can "come and go at anytime", but it
>>>>>>> allows
>>>>>>> users to clings to synchronous events to do tons of work.
>>>>>>>
>>>>>>>    Then I guess this is something that ipojo is doing incorrectly?
>>>>>>>
>>>>>>>  Hard for me to say, but if there is a case where we can fire events
>>>>>>
>>>>> without holding locks, then you are correct in saying that we should
>>>>> try
>>>>> to
>>>>> avoid doing so. Likewise, users should avoid doing too much when they
>>>>> receive synchronous events.
>>>>>
>>>>>   Well, iPOJO is not doing anything. It is just loading a class, and
>>>>>
>>>> that's
>>>> what's causing the global lock to be acquired.
>>>>
>>>>  You're really going to make me look into this, aren't you? ;-)
>>>
>>>
>>>  :) Thanks from me and the tons of other people using this framework!
>>
>>
>>  I'm not sure what is going on, but for whatever reason you are in the
>>> middle of a refresh (which requires global lock) while it appears that
>>> iPOJO is starting to manage a new bundle, which ultimately results in
>>> someone trying to do a dynamic import (which also requires global lock).
>>>
>>> There isn't much we can do in this case other than try to detect it and
>>> fail for the global lock acquire...
>>>
>>>  And ipojo will have to deal... Seems simpler if ipojo didn't try to
>> unregister services or do that sort of thing (or at least not acquire any
>> locks of its own) synchronously.
>>
>
> iPOJO doesn't appear to be doing anything synchronously here. It looks
> like it is working on another thread to start management of a perhaps newly
> installed or updated bundle. The issue actually arises because the
> framework instigates a dynamic import when trying to determine if it should
> deliver the event to a service listener (it needs to try to load classes in
> some cases to see if the service's class is compatible with the listener's
> service class).
>
> This is really ugly. Not really sure what we could do here other than
> always fail service event delivery if the listener bundle doesn't already
> have access to the service class. But that would still be complicated to do
> and would lead to other failure scenarios.
>
> I'd have to think about that one.
>
>
That's in one thread. In the other, the framework calls stopBundle() and
ipojo is reacting to that be calling InstanceCreator.removeFactory(), and
this is the guy that grabs the other lock. If ipojo instead either doesn't
grab the lock or pushes the work somewhere else, this ugly mess goes away...


> -> richard
>
>
>>
>>  -> richard
>>>
>>>
>>>    -> richard
>>>>
>>>>>
>>>>>     -> richard
>>>>>
>>>>>>      Name: Thread-2
>>>>>>>
>>>>>>>  State: WAITING on [Ljava.lang.Object;@4a018e1b
>>>>>>>>
>>>>>>>>> Total blocked: 38,871,649  Total waited: 38,871,650
>>>>>>>>>>
>>>>>>>>>> Stack trace:
>>>>>>>>>>       java.lang.Object.wait(Native Method)
>>>>>>>>>> java.lang.Object.wait(Object.**********java:485)
>>>>>>>>>> org.apache.felix.framework.**********Felix.acquireGlobalLock(***
>>>>>>>>>> ***
>>>>>>>>>> Felix.**
>>>>>>>>>> **java:5033)
>>>>>>>>>> org.apache.felix.framework.**********StatefulResolver.resolve(**
>>>>>>>>>> **
>>>>>>>>>> StatefulResolver.java:451)
>>>>>>>>>> org.apache.felix.framework.**********BundleWiringImpl.****
>>>>>>>>>> searchDynamicImports(**
>>>>>>>>>> BundleWiringImpl.java:1578)
>>>>>>>>>> org.apache.felix.framework.**********BundleWiringImpl.**
>>>>>>>>>> findClassOrResourceByDelegatio**********n(BundleWiringImpl.**
>>>>>>>>>> java:**
>>>>>>>>>> ****1478)
>>>>>>>>>> org.apache.felix.framework.**********BundleWiringImpl.access$****
>>>>>>>>>> 400(****
>>>>>>>>>> BundleWiringImpl.java:75)
>>>>>>>>>> org.apache.felix.framework.**********BundleWiringImpl$**
>>>>>>>>>> BundleClassLoader.loadClass(**********BundleWiringImpl.java:****
>>>>>>>>>> 1882)
>>>>>>>>>> java.lang.ClassLoader.**********loadClass(ClassLoader.java:*****
>>>>>>>>>> **
>>>>>>>>>> ***247)
>>>>>>>>>> org.apache.felix.framework.**********BundleWiringImpl.****
>>>>>>>>>> getClassByDelegation(**
>>>>>>>>>> BundleWiringImpl.java:1356)
>>>>>>>>>> org.apache.felix.framework.**********ServiceRegistrationImpl$****
>>>>>>>>>> ServiceReferenceImpl.**********isAssignableTo(****
>>>>>>>>>> ServiceRegistrationImpl.java:**********
>>>>>>>>>> 548)
>>>>>>>>>> org.apache.felix.framework.**********util.Util.****
>>>>>>>>>> isServiceAssignable(****
>>>>>>>>>> Util.java:280)
>>>>>>>>>> org.apache.felix.framework.**********util.EventDispatcher.**
>>>>>>>>>> invokeServiceListenerCallback(**********EventDispatcher.java:***
>>>>>>>>>> *916)
>>>>>>>>>> org.apache.felix.framework.**********util.EventDispatcher.****
>>>>>>>>>> fireEventImmediately(
>>>>>>>>>> **EventDispatcher.java:793)
>>>>>>>>>> org.apache.felix.framework.**********util.EventDispatcher.****
>>>>>>>>>> fireServiceEvent(**
>>>>>>>>>> EventDispatcher.java:543)
>>>>>>>>>> org.apache.felix.framework.**********Felix.fireServiceEvent(**
>>>>>>>>>> Felix.*****
>>>>>>>>>> *java:4346)
>>>>>>>>>> org.apache.felix.framework.**********Felix.registerService(**
>>>>>>>>>> Felix.******
>>>>>>>>>> java:3356)
>>>>>>>>>> org.apache.felix.framework.**********BundleContextImpl.******
>>>>>>>>>> registerService(**
>>>>>>>>>> BundleContextImpl.java:346)
>>>>>>>>>> org.apache.felix.ipojo.**********IPojoFactory.start(****
>>>>>>>>>> IPojoFactory.java:613)
>>>>>>>>>>         - locked org.apache.felix.ipojo.**********
>>>>>>>>>> ComponentFactory@468034b6
>>>>>>>>>> org.apache.felix.ipojo.**********Extender.********
>>>>>>>>>> createAbstractFactory(**
>>>>>>>>>> Extender.java:520)
>>>>>>>>>> org.apache.felix.ipojo.**********Extender.parse(Extender.java:**
>>>>>>>>>> ***
>>>>>>>>>> *****301)
>>>>>>>>>> org.apache.felix.ipojo.**********Extender.startManagementFor(***
>>>>>>>>>> *******
>>>>>>>>>> Extender.java:237)
>>>>>>>>>> org.apache.felix.ipojo.**********Extender.access$600(Extender.**
>>>>>>>>>> *****
>>>>>>>>>> ***java:52)
>>>>>>>>>> org.apache.felix.ipojo.**********Extender$CreatorThread.run(****
>>>>>>>>>> ******
>>>>>>>>>> Extender.java:769)
>>>>>>>>>> java.lang.Thread.run(Thread.**********java:662)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Name: FelixFrameworkWiring
>>>>>>>>>> State: BLOCKED on org.apache.felix.ipojo.****
>>>>>>>>>>
>>>>>>>>>> ComponentFactory@468034b6owned
>>>>>>>>>>
>>>>>>>>>> by: Thread-2
>>>>>>>>>> Total blocked: 7  Total waited: 1
>>>>>>>>>>
>>>>>>>>>> Stack trace:
>>>>>>>>>>       org.apache.felix.ipojo.**********IPojoFactory.****
>>>>>>>>>> removeFactoryStateListener(**
>>>>>>>>>> IPojoFactory.java:511)
>>>>>>>>>> org.apache.felix.ipojo.**********InstanceCreator.**
>>>>>>>>>> removeFactory(**
>>>>>>>>>> ******
>>>>>>>>>> InstanceCreator.java:199)
>>>>>>>>>> org.apache.felix.ipojo.**********Extender.closeManagementFor(***
>>>>>>>>>> *******
>>>>>>>>>> Extender.java:180)
>>>>>>>>>> org.apache.felix.ipojo.**********Extender.bundleChanged(****
>>>>>>>>>> Extender.java:153)
>>>>>>>>>> org.apache.felix.framework.**********util.EventDispatcher.**
>>>>>>>>>> invokeBundleListenerCallback(**********EventDispatcher.java:**
>>>>>>>>>> 868)
>>>>>>>>>> org.apache.felix.framework.**********util.EventDispatcher.****
>>>>>>>>>> fireEventImmediately(
>>>>>>>>>> **EventDispatcher.java:789)
>>>>>>>>>> org.apache.felix.framework.**********util.EventDispatcher.****
>>>>>>>>>> fireBundleEvent(**
>>>>>>>>>> EventDispatcher.java:514)
>>>>>>>>>> org.apache.felix.framework.**********Felix.fireBundleEvent(**
>>>>>>>>>> Felix.******
>>>>>>>>>> java:4330)
>>>>>>>>>> org.apache.felix.framework.**********Felix.stopBundle(Felix.**
>>>>>>>>>> java:***
>>>>>>>>>> ***2451)
>>>>>>>>>> org.apache.felix.framework.**********Felix$RefreshHelper.stop(**
>>>>>>>>>> ******
>>>>>>>>>> Felix.java:4715)
>>>>>>>>>> org.apache.felix.framework.**********Felix.refreshPackages(**
>>>>>>>>>> Felix.******
>>>>>>>>>> java:4037)
>>>>>>>>>> org.apache.felix.framework.**********FrameworkWiringImpl.run(****
>>>>>>>>>> FrameworkWiringImpl.java:178)
>>>>>>>>>> java.lang.Thread.run(Thread.**********java:662)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Sat, Dec 22, 2012 at 6:39 PM, Richard S. Hall <
>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>
>>>>>>>>>>    wrote:
>>>>>>>>>>
>>>>>>>>>>        On 12/22/12 20:41 , Jad Naous wrote:
>>>>>>>>>>>
>>>>>>>>>>>        Thanks! I was building with java6. Don't know if that is
>>>>>>>>>> the
>>>>>>>>>>
>>>>>>>>>>  issue.
>>>>>>>>>>>
>>>>>>>>>>>    Anyway,
>>>>>>>>>>>
>>>>>>>>>>>  I tested the snapshot, and looks like that fixes it.
>>>>>>>>>>>>
>>>>>>>>>>>> Any idea when 4.1.0 will be released? Do you know if
>>>>>>>>>>>> http://svn.apache.org/viewvc?************view=revision&**
>>>>>>>>>>>> revision=**<http://svn.apache.org/viewvc?**********view=revision&revision=**>
>>>>>>>>>>>> ****<http://svn.apache.org/**viewvc?********view=revision&**
>>>>>>>>>>>> revision=****<http://svn.apache.org/viewvc?********view=revision&revision=****>
>>>>>>>>>>>> >
>>>>>>>>>>>> **1421958<http://svn.apache.****org/viewvc?******view=**
>>>>>>>>>>>> revision&revision=****1421958<**http://svn.apache.org/viewvc?**
>>>>>>>>>>>> ******view=revision&revision=******1421958<http://svn.apache.org/viewvc?******view=revision&revision=****1421958>
>>>>>>>>>>>> >
>>>>>>>>>>>> <http://svn.apache.**org/****viewvc?****view=revision&**
>>>>>>>>>>>> revision=**1421958<http://svn.****apache.org/viewvc?****view=**
>>>>>>>>>>>> ** <http://apache.org/viewvc?****view=**>
>>>>>>>>>>>> revision&revision=**1421958<ht**tp://svn.apache.org/viewvc?****
>>>>>>>>>>>> **view=revision&revision=****1421958<http://svn.apache.org/viewvc?****view=revision&revision=**1421958>
>>>>>>>>>>>> >
>>>>>>>>>>>> <http://svn.apache.org/********viewvc?**view=revision&****<http://svn.apache.org/******viewvc?**view=revision&****>
>>>>>>>>>>>> <ht**tp://svn.apache.org/******viewvc?**view=revision&****<http://svn.apache.org/****viewvc?**view=revision&****>
>>>>>>>>>>>> >
>>>>>>>>>>>> revision=1421958<http://svn.****apache.org/**viewvc?**view=**<http://apache.org/**viewvc?**view=**>
>>>>>>>>>>>> revision&**revision=1421958<ht**tp://svn.apache.org/**viewvc?**
>>>>>>>>>>>> **view=revision&**revision=**1421958<http://svn.apache.org/**viewvc?**view=revision&**revision=1421958>
>>>>>>>>>>>> >
>>>>>>>>>>>> <http://svn.**apache.org/****viewvc?**view=**revision&**<http://apache.org/**viewvc?**view=**revision&**>
>>>>>>>>>>>> revision=1421958<http://**apache.org/viewvc?**view=****
>>>>>>>>>>>> revision&revision=1421958<http://apache.org/viewvc?**view=**revision&revision=1421958>
>>>>>>>>>>>> >
>>>>>>>>>>>> <http://svn.**apache.org/**viewvc?**view=**<http://apache.org/viewvc?**view=**>
>>>>>>>>>>>> revision&revision=1421958<http**://svn.apache.org/viewvc?****
>>>>>>>>>>>> view=revision&revision=1421958<http://svn.apache.org/viewvc?**view=revision&revision=1421958>
>>>>>>>>>>>> **>
>>>>>>>>>>>> <http://svn.apache.org/**********viewvc?view=revision&**
>>>>>>>>>>>> revision=****<http://svn.apache.org/********viewvc?view=revision&revision=****>
>>>>>>>>>>>> <http://svn.**apache.org/******viewvc?view=**
>>>>>>>>>>>> revision&revision=**<http://svn.apache.org/******viewvc?view=revision&revision=**>
>>>>>>>>>>>> >
>>>>>>>>>>>> ****1421958<http://svn.apache.****org/****viewvc?view=**
>>>>>>>>>>>> revision&**
>>>>>>>>>>>> revision=****1421958<http://**svn.apache.org/****viewvc?**
>>>>>>>>>>>> view=revision&revision=******1421958<http://svn.apache.org/****viewvc?view=revision&revision=****1421958>
>>>>>>>>>>>> >
>>>>>>>>>>>> <http://svn.apache.**org/******viewvc?view=revision&**
>>>>>>>>>>>> revision=**1421958<http://svn.****apache.org/**viewvc?view=**
>>>>>>>>>>>> revision&revision=**1421958<ht**tp://svn.apache.org/**viewvc?**
>>>>>>>>>>>> view=revision&revision=****1421958<http://svn.apache.org/**viewvc?view=revision&revision=**1421958>
>>>>>>>>>>>> >
>>>>>>>>>>>> <http://svn.apache.**org/******viewvc?view=revision&****
>>>>>>>>>>>> revision=1421958<http://svn.******apache.org/viewvc?view=**<ht*
>>>>>>>>>>>> *tp://apache.org/viewvc?view=**<http://apache.org/viewvc?view=**>
>>>>>>>>>>>> **>
>>>>>>>>>>>> revision&revision=1421958<**http**://svn.apache.org/**
>>>>>>>>>>>> viewvc?view=** <http://svn.apache.org/viewvc?view=**>
>>>>>>>>>>>>
>>>>>>>>>>>> revision&revision=1421958<http**://svn.apache.org/viewvc?view=*
>>>>>>>>>>>> *revision&revision=1421958<http://svn.apache.org/viewvc?view=revision&revision=1421958>
>>>>>>>>>>>> >
>>>>>>>>>>>>    will
>>>>>>>>>>>>
>>>>>>>>>>>>  apply
>>>>>>>>>>>>>
>>>>>>>>>>>>>  cleanly onto 4.0.3? Otherwise, how stable do you think is
>>>>>>>>>>>> 4.1.0-SNAPSHOT?
>>>>>>>>>>>>
>>>>>>>>>>>>      The release version will be 4.2.0, but the 4.1.0-SNAPSHOT
>>>>>>>>>>>> build
>>>>>>>>>>>> should
>>>>>>>>>>>>
>>>>>>>>>>>>    be
>>>>>>>>>>>>
>>>>>>>>>>>>  reasonably stable. We try to keep trunk stable.
>>>>>>>>>>>
>>>>>>>>>>> I want to try to get a release out soon, but I don't have a
>>>>>>>>>>> specific
>>>>>>>>>>> time
>>>>>>>>>>> table. I'll try to get in done in January if all goes well.
>>>>>>>>>>>
>>>>>>>>>>> -> richard
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>      Thanks!
>>>>>>>>>>>
>>>>>>>>>>>    Jad.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>> On Fri, Dec 21, 2012 at 6:49 AM, Richard S. Hall <
>>>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>>>
>>>>>>>>>>>>     wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>         It built fine for me. I'm was building with Java 7.
>>>>>>>>>>>>
>>>>>>>>>>>>>      Regardless, I deployed snapshots of framework, main, and
>>>>>>>>>>>>>
>>>>>>>>>>>>   main.distribution, so just grab what you want from the Apache
>>>>>>>>>>>>
>>>>>>>>>>>>> snapshot
>>>>>>>>>>>>> repo
>>>>>>>>>>>>> to try it out.
>>>>>>>>>>>>>
>>>>>>>>>>>>> -> richard
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On 12/20/12 18:56 , Jad Naous wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>       It does look like the same issue.
>>>>>>>>>>>>>
>>>>>>>>>>>>>     Got the trunk/framework. mvn clean install gives:
>>>>>>>>>>>>>
>>>>>>>>>>>>>   [INFO] --- maven-compiler-plugin:2.3.2:**************compile
>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> (default-compile) @
>>>>>>>>>>>>>> org.apache.felix.framework ---
>>>>>>>>>>>>>> Dec 20, 2012 3:54:59 PM org.sonatype.guice.bean.****
>>>>>>>>>>>>>> reflect.Logs$JULSink
>>>>>>>>>>>>>> warn
>>>>>>>>>>>>>> WARNING: Error injecting: org.apache.maven.plugin.********
>>>>>>>>>>>>>> ******
>>>>>>>>>>>>>> CompilerMojo
>>>>>>>>>>>>>> java.lang.**************NoClassDefFoundError:
>>>>>>>>>>>>>> org/codehaus/plexus/compiler/**************util/scan/******
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> InclusionScanException
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>> jad.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Thu, Dec 20, 2012 at 3:22 PM, Richard S. Hall <
>>>>>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>      wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>          On 12/20/12 4:10 PM, Jad Naous wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>           If a bundle undergoes a refresh while ipojo is still
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>  initializing
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>       components, a deadlock can happen.  The issue is that if
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>  ipojo is
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>    attempting to register a service, it will be doing it
>>>>>>>>>>>>>>> while
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>  synchronizing
>>>>>>>>>>>>>>>> on the InstanceCreator instance. It will then try to
>>>>>>>>>>>>>>>> register
>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>> service
>>>>>>>>>>>>>>>> which requires the framework's global lock.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>        Registering a service doesn't require a global, just
>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>> bundle
>>>>>>>>>>>>>>>> lock.
>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>      think this could be related to:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>             https://issues.apache.org/**********<https://issues.apache.org/********>
>>>>>>>>>>>>>>>> <https://issues.apache.**org/******<https://issues.apache.org/******>
>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>  ******jira/browse/FELIX-3761<**h**ttps://
>>>>>>>>>>>>>>> issues.apache.org/******* <http://issues.apache.org/*****>
>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<**
>>>>>>>>>>>>>>> https://issues.apache.org/************jira/browse/FELIX-3761<https://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <h**ttps://issues.apache.org/***
>>>>>>>>>>>>>>> ***********jira/browse/FELIX-****<http://issues.apache.org/************jira/browse/FELIX-**>
>>>>>>>>>>>>>>> 3761<http://issues.apache.org/************jira/browse/FELIX-
>>>>>>>>>>>>>>> **3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <https://issues.apache.**org/**********jira/browse/FELIX-***
>>>>>>>>>>>>>>> *3761<https://issues.apache.**org/********jira/browse/FELIX-
>>>>>>>>>>>>>>> **3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <htt**ps://issues.apache.org/***
>>>>>>>>>>>>>>> ***********jira/browse/FELIX-****<http://issues.apache.org/************jira/browse/FELIX-**>
>>>>>>>>>>>>>>> 3761<http://issues.apache.org/************jira/browse/FELIX-
>>>>>>>>>>>>>>> **3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <http://issues.apache.org/************jira/browse/FELIX-3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/**********jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>> <**https://issues.apache.org/************jira/browse/FELIX-*
>>>>>>>>>>>>>>> *3761<https://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> <https://issues.apache.**org/********jira/browse/FELIX-**
>>>>>>>>>>>>>>> 3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <**https://issues.apache.org/***
>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> <**https://issues.apache.org/********jira/browse/FELIX-3761<https://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <https**://issues.apache.org/***
>>>>>>>>>>>>>>> *********jira/**browse/FELIX-****<http://issues.apache.org/**********jira/**browse/FELIX-**>
>>>>>>>>>>>>>>> 3761<http://issues.apache.org/**********jira/**browse/FELIX-
>>>>>>>>>>>>>>> **3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <http://issues.apache.org/**********jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> **<http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/************jira/browse/FELIX-*
>>>>>>>>>>>>>>> *3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> <http://issues.apache.org/**********jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>> <**http://issues.apache.org/**********jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/***
>>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> <**http://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> <ht**tps://issues.apache.org/******jira/browse/FELIX-3761<https://issues.apache.org/****jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <https:/**/issues.apache.org/***
>>>>>>>>>>>>>>> *********jira/**browse/FELIX-****<http://issues.apache.org/**********jira/**browse/FELIX-**>
>>>>>>>>>>>>>>> 3761<http://issues.apache.org/**********jira/**browse/FELIX-
>>>>>>>>>>>>>>> **3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <http://issues.apache.org/**********jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> **<http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****
>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> **<http://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <http**s://issues.apache.org/**********jira/**browse/FELIX-*
>>>>>>>>>>>>>>> *3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>> <**http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <http**s://issues.apache.org/***
>>>>>>>>>>>>>>> *****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <http**s://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <http**s://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <http**s://issues.apache.org/**jira/**browse/FELIX-3761<https://issues.apache.org/**jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <https:/**/issues.apache.org/***
>>>>>>>>>>>>>>> *********jira/**browse/FELIX-****<http://issues.apache.org/**********jira/**browse/FELIX-**>
>>>>>>>>>>>>>>> 3761<http://issues.apache.org/**********jira/**browse/FELIX-
>>>>>>>>>>>>>>> **3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <http://issues.apache.org/**********jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>> <**http://issues.apache.org/****
>>>>>>>>>>>>>>> ******jira/**browse/FELIX-3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> **<http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****
>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> **<http://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <http**://issues.apache.org/****
>>>>>>>>>>>>>>> ****jira/****browse/FELIX-3761<http://issues.apache.org/******jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> **<http://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/******browse/FELIX-3761<http://issues.apache.org/**jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/********browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <https**://issues.apache.org/**********jira/**browse/FELIX-*
>>>>>>>>>>>>>>> *3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>>> <**http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <http**://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <https**://issues.apache.org/***
>>>>>>>>>>>>>>> *****jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <http**://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <https**://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <http**://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <https**://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <http**://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> <https**://issues.apache.org/**jira/**browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3761<https://issues.apache.org/jira/browse/FELIX-3761>
>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>> This avoid grabbing the bundle lock when registering a
>>>>>>>>>>>>>>> service,
>>>>>>>>>>>>>>> so
>>>>>>>>>>>>>>> maybe
>>>>>>>>>>>>>>> it will help your situation. You could try to build the
>>>>>>>>>>>>>>> framework
>>>>>>>>>>>>>>> from
>>>>>>>>>>>>>>> trunk and see if it makes a difference.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> If you aren't able to build from trunk, let me know and I'll
>>>>>>>>>>>>>>> try
>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>> publish a snapshot build since I don't think we have a recent
>>>>>>>>>>>>>>> one
>>>>>>>>>>>>>>> (we
>>>>>>>>>>>>>>> should do this no matter what).
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> -> richard
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>        If a refresh is happening in another thread, the
>>>>>>>>>>>>>>> refresh
>>>>>>>>>>>>>>> will
>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>> holding
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>      the framework's global lock, which will then call
>>>>>>>>>>>>>>> IPOJO's
>>>>>>>>>>>>>>> extender,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>    which
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>  then attempts to call a method on InstanceCreator, hence
>>>>>>>>>>>>>>>> leading
>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> deadlock.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Here are the stack traces:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Daemon Thread [Thread-1] (Suspended)
>>>>>>>>>>>>>>>> Object.wait(long) line: not available [native method]
>>>>>>>>>>>>>>>> Object[](Object).wait() line: 485
>>>>>>>>>>>>>>>> Felix.acquireBundleLock(****************BundleImpl, int)
>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>> 4871
>>>>>>>>>>>>>>>> Felix.registerService(****************BundleImpl, String[],
>>>>>>>>>>>>>>>> Object,
>>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>> 3205
>>>>>>>>>>>>>>>> BundleContextImpl.****************registerService(String[],
>>>>>>>>>>>>>>>> Object,
>>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>> 346
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> IPojoContext.registerService(****************String[],
>>>>>>>>>>>>>>>> Object,
>>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>> 385
>>>>>>>>>>>>>>>> ProvidedService.****************registerService() line: 362
>>>>>>>>>>>>>>>> ProvidedServiceHandler.__M_*****
>>>>>>>>>>>>>>>> ***********stateChanged(int)
>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>> 509
>>>>>>>>>>>>>>>> ProvidedServiceHandler.****************stateChanged(int)
>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> not
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> available
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> InstanceManager.setState(int) line: 536
>>>>>>>>>>>>>>>> InstanceManager.start() line: 418
>>>>>>>>>>>>>>>> ComponentFactory.****************createInstance(Dictionary,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> IPojoContext,
>>>>>>>>>>>>>>>> HandlerManager[])
>>>>>>>>>>>>>>>> line: 179
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> ComponentFactory(IPojoFactory)****************.**
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>>>>>>> Dictionary,
>>>>>>>>>>>>>>>> ServiceContext) line: 310
>>>>>>>>>>>>>>>> ComponentFactory(IPojoFactory)****************.**
>>>>>>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>>> line: 239
>>>>>>>>>>>>>>>> InstanceCreator$****************
>>>>>>>>>>>>>>>> ManagedInstance.create(**********
>>>>>>>>>>>>>>>> ******
>>>>>>>>>>>>>>>> IPojoFactory)
>>>>>>>>>>>>>>>> line: 355
>>>>>>>>>>>>>>>> InstanceCreator.addInstance(****************Dictionary,
>>>>>>>>>>>>>>>> long)
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> line: 89
>>>>>>>>>>>>>>>> Extender.parse(Bundle, String) line: 306
>>>>>>>>>>>>>>>> Extender.startManagementFor(****************Bundle) line:
>>>>>>>>>>>>>>>> 237
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Extender.access$600(Extender, Bundle) line: 52
>>>>>>>>>>>>>>>> Extender$CreatorThread.run() line: 769
>>>>>>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Daemon Thread [FelixFrameworkWiring] (Suspended)
>>>>>>>>>>>>>>>> InstanceCreator.****************
>>>>>>>>>>>>>>>> removeInstancesFromBundle(*******
>>>>>>>>>>>>>>>> *****
>>>>>>>>>>>>>>>> ****long)
>>>>>>>>>>>>>>>> line: 116
>>>>>>>>>>>>>>>> Extender.closeManagementFor(****************Bundle) line:
>>>>>>>>>>>>>>>> 171
>>>>>>>>>>>>>>>> Extender.bundleChanged(****************BundleEvent) line:
>>>>>>>>>>>>>>>> 153
>>>>>>>>>>>>>>>> EventDispatcher.****************
>>>>>>>>>>>>>>>> invokeBundleListenerCallback(****
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> ***
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> ****
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> *****Bundle,
>>>>>>>>>>>>>>>> EventListener,
>>>>>>>>>>>>>>>> EventObject) line: 868
>>>>>>>>>>>>>>>> EventDispatcher.****************
>>>>>>>>>>>>>>>> fireEventImmediately(********
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> EventDispatcher,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> int, Map,
>>>>>>>>>>>>>>>> EventObject, Dictionary) line: 789
>>>>>>>>>>>>>>>> EventDispatcher.****************
>>>>>>>>>>>>>>>> fireBundleEvent(BundleEvent,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Framework)
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 514
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Felix.fireBundleEvent(int, Bundle) line: 4244
>>>>>>>>>>>>>>>> Felix.stopBundle(BundleImpl, boolean) line: 2351
>>>>>>>>>>>>>>>> Felix$RefreshHelper.stop() line: 4629
>>>>>>>>>>>>>>>> Felix.refreshPackages(****************Collection,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> FrameworkListener[])
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 3951
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> FrameworkWiringImpl.run() line: 172
>>>>>>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>

Re: IPOJO initialization + refresh deadlock

Posted by "Richard S. Hall" <he...@ungoverned.org>.
On 1/1/13 12:40, Jad Naous wrote:
> On Tue, Jan 1, 2013 at 9:16 AM, Richard S. Hall <he...@ungoverned.org>wrote:
>
>> On 1/1/13 11:51, Jad Naous wrote:
>>
>>> On Tue, Jan 1, 2013 at 8:30 AM, Richard S. Hall <heavy@ungoverned.org
>>>> wrote:
>>>   On 1/1/13 11:13, Jad Naous wrote:
>>>>   On Tue, Jan 1, 2013 at 7:58 AM, Richard S. Hall <heavy@ungoverned.org
>>>>>> wrote:
>>>>>>
>>>>>    On 1/1/13 10:37, Jad Naous wrote:
>>>>>
>>>>>>    On Tue, Jan 1, 2013 at 6:21 AM, Richard S. Hall<heavy@ungoverned.org
>>>>>>> **
>>>>>>> wrote:
>>>>>>>
>>>>>>>     On 1/1/13 06:09, Jad Naous wrote:
>>>>>>>
>>>>>>>      Happy new year!
>>>>>>>>   I'm running into another deadlock now. It seems like there needs to
>>>>>>>>> be a
>>>>>>>>> more rigorous study of how locking is used in the framework. In
>>>>>>>>> particular,
>>>>>>>>> it seems like the framework should not be invoking any listeners
>>>>>>>>> within
>>>>>>>>> the
>>>>>>>>> same thread that's executing the stopping/starting/refreshing of
>>>>>>>>> bundles...
>>>>>>>>> Anywhere that happens there will be a potential for a deadlock
>>>>>>>>> because
>>>>>>>>> of
>>>>>>>>> a
>>>>>>>>> misordering of lock acquisition. The framework should never call
>>>>>>>>> into
>>>>>>>>> user
>>>>>>>>> code with any locks held.
>>>>>>>>>
>>>>>>>>>     Yeah, tell me about it, but it is not possible in all cases,
>>>>>>>>>
>>>>>>>>>   unfortunately. I personally feel that all events should be
>>>>>>>> asynchronous,
>>>>>>>> but that's another story.
>>>>>>>>
>>>>>>>> -> richard
>>>>>>>>
>>>>>>>>
>>>>>>>>     I'm happy to help fix this, but I need some pointers as to what
>>>>>>>> needs to
>>>>>>>>
>>>>>>>>   happen. For synchronous events, what are the requirements? Or is
>>>>>>> this
>>>>>>> not
>>>>>>> fixable? Can the lock be released before firing the events?
>>>>>>>
>>>>>>>    I don't think it can be fixed, some of these things are baked into
>>>>>>> the
>>>>>>>
>>>>>> spec. I think the spec even states somewhere that synchronous event
>>>>>> listeners must be careful since they may be holding framework locks, so
>>>>>> they shouldn't try to do too much. Of course, that is not easy advice
>>>>>> to
>>>>>> follow since framework impls vary.
>>>>>>
>>>>>> We even have bugs open that say we aren't holding locks when we should
>>>>>> be,
>>>>>> e.g.:
>>>>>>
>>>>>>        https://issues.apache.org/******jira/browse/FELIX-3806<https://issues.apache.org/****jira/browse/FELIX-3806>
>>>>>> <https:/**/issues.apache.org/**jira/**browse/FELIX-3806<https://issues.apache.org/**jira/browse/FELIX-3806>
>>>>>> <https:/**/issues.apache.org/**jira/**browse/FELIX-3806<http://issues.apache.org/jira/**browse/FELIX-3806>
>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3806<https://issues.apache.org/jira/browse/FELIX-3806>
>>>>>>
>>>>>> This is one of the poorly designed parts of the OSGi spec. It was meant
>>>>>> to
>>>>>> work in a world were services can "come and go at anytime", but it
>>>>>> allows
>>>>>> users to clings to synchronous events to do tons of work.
>>>>>>
>>>>>>    Then I guess this is something that ipojo is doing incorrectly?
>>>>>>
>>>>> Hard for me to say, but if there is a case where we can fire events
>>>> without holding locks, then you are correct in saying that we should try
>>>> to
>>>> avoid doing so. Likewise, users should avoid doing too much when they
>>>> receive synchronous events.
>>>>
>>>>   Well, iPOJO is not doing anything. It is just loading a class, and
>>> that's
>>> what's causing the global lock to be acquired.
>>>
>> You're really going to make me look into this, aren't you? ;-)
>>
>>
> :) Thanks from me and the tons of other people using this framework!
>
>
>> I'm not sure what is going on, but for whatever reason you are in the
>> middle of a refresh (which requires global lock) while it appears that
>> iPOJO is starting to manage a new bundle, which ultimately results in
>> someone trying to do a dynamic import (which also requires global lock).
>>
>> There isn't much we can do in this case other than try to detect it and
>> fail for the global lock acquire...
>>
> And ipojo will have to deal... Seems simpler if ipojo didn't try to
> unregister services or do that sort of thing (or at least not acquire any
> locks of its own) synchronously.

iPOJO doesn't appear to be doing anything synchronously here. It looks 
like it is working on another thread to start management of a perhaps 
newly installed or updated bundle. The issue actually arises because the 
framework instigates a dynamic import when trying to determine if it 
should deliver the event to a service listener (it needs to try to load 
classes in some cases to see if the service's class is compatible with 
the listener's service class).

This is really ugly. Not really sure what we could do here other than 
always fail service event delivery if the listener bundle doesn't 
already have access to the service class. But that would still be 
complicated to do and would lead to other failure scenarios.

I'd have to think about that one.

-> richard

>
>
>> -> richard
>>
>>
>>>   -> richard
>>>>
>>>>     -> richard
>>>>>>      Name: Thread-2
>>>>>>
>>>>>>> State: WAITING on [Ljava.lang.Object;@4a018e1b
>>>>>>>>> Total blocked: 38,871,649  Total waited: 38,871,650
>>>>>>>>>
>>>>>>>>> Stack trace:
>>>>>>>>>       java.lang.Object.wait(Native Method)
>>>>>>>>> java.lang.Object.wait(Object.********java:485)
>>>>>>>>> org.apache.felix.framework.********Felix.acquireGlobalLock(****
>>>>>>>>> Felix.**
>>>>>>>>> **java:5033)
>>>>>>>>> org.apache.felix.framework.********StatefulResolver.resolve(**
>>>>>>>>> StatefulResolver.java:451)
>>>>>>>>> org.apache.felix.framework.********BundleWiringImpl.****
>>>>>>>>> searchDynamicImports(**
>>>>>>>>> BundleWiringImpl.java:1578)
>>>>>>>>> org.apache.felix.framework.********BundleWiringImpl.**
>>>>>>>>> findClassOrResourceByDelegatio********n(BundleWiringImpl.java:**
>>>>>>>>> ****1478)
>>>>>>>>> org.apache.felix.framework.********BundleWiringImpl.access$**
>>>>>>>>> 400(****
>>>>>>>>> BundleWiringImpl.java:75)
>>>>>>>>> org.apache.felix.framework.********BundleWiringImpl$**
>>>>>>>>> BundleClassLoader.loadClass(********BundleWiringImpl.java:**1882)
>>>>>>>>> java.lang.ClassLoader.********loadClass(ClassLoader.java:*****
>>>>>>>>> ***247)
>>>>>>>>> org.apache.felix.framework.********BundleWiringImpl.****
>>>>>>>>> getClassByDelegation(**
>>>>>>>>> BundleWiringImpl.java:1356)
>>>>>>>>> org.apache.felix.framework.********ServiceRegistrationImpl$**
>>>>>>>>> ServiceReferenceImpl.********isAssignableTo(****
>>>>>>>>> ServiceRegistrationImpl.java:********
>>>>>>>>> 548)
>>>>>>>>> org.apache.felix.framework.********util.Util.****
>>>>>>>>> isServiceAssignable(****
>>>>>>>>> Util.java:280)
>>>>>>>>> org.apache.felix.framework.********util.EventDispatcher.**
>>>>>>>>> invokeServiceListenerCallback(********EventDispatcher.java:**916)
>>>>>>>>> org.apache.felix.framework.********util.EventDispatcher.****
>>>>>>>>> fireEventImmediately(
>>>>>>>>> **EventDispatcher.java:793)
>>>>>>>>> org.apache.felix.framework.********util.EventDispatcher.****
>>>>>>>>> fireServiceEvent(**
>>>>>>>>> EventDispatcher.java:543)
>>>>>>>>> org.apache.felix.framework.********Felix.fireServiceEvent(**
>>>>>>>>> Felix.*****
>>>>>>>>> *java:4346)
>>>>>>>>> org.apache.felix.framework.********Felix.registerService(**
>>>>>>>>> Felix.******
>>>>>>>>> java:3356)
>>>>>>>>> org.apache.felix.framework.********BundleContextImpl.******
>>>>>>>>> registerService(**
>>>>>>>>> BundleContextImpl.java:346)
>>>>>>>>> org.apache.felix.ipojo.********IPojoFactory.start(****
>>>>>>>>> IPojoFactory.java:613)
>>>>>>>>>         - locked org.apache.felix.ipojo.********
>>>>>>>>> ComponentFactory@468034b6
>>>>>>>>> org.apache.felix.ipojo.********Extender.********
>>>>>>>>> createAbstractFactory(**
>>>>>>>>> Extender.java:520)
>>>>>>>>> org.apache.felix.ipojo.********Extender.parse(Extender.java:***
>>>>>>>>> *****301)
>>>>>>>>> org.apache.felix.ipojo.********Extender.startManagementFor(********
>>>>>>>>> Extender.java:237)
>>>>>>>>> org.apache.felix.ipojo.********Extender.access$600(Extender.*****
>>>>>>>>> ***java:52)
>>>>>>>>> org.apache.felix.ipojo.********Extender$CreatorThread.run(********
>>>>>>>>> Extender.java:769)
>>>>>>>>> java.lang.Thread.run(Thread.********java:662)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Name: FelixFrameworkWiring
>>>>>>>>> State: BLOCKED on org.apache.felix.ipojo.****
>>>>>>>>>
>>>>>>>>> ComponentFactory@468034b6owned
>>>>>>>>>
>>>>>>>>> by: Thread-2
>>>>>>>>> Total blocked: 7  Total waited: 1
>>>>>>>>>
>>>>>>>>> Stack trace:
>>>>>>>>>       org.apache.felix.ipojo.********IPojoFactory.****
>>>>>>>>> removeFactoryStateListener(**
>>>>>>>>> IPojoFactory.java:511)
>>>>>>>>> org.apache.felix.ipojo.********InstanceCreator.removeFactory(**
>>>>>>>>> ******
>>>>>>>>> InstanceCreator.java:199)
>>>>>>>>> org.apache.felix.ipojo.********Extender.closeManagementFor(********
>>>>>>>>> Extender.java:180)
>>>>>>>>> org.apache.felix.ipojo.********Extender.bundleChanged(****
>>>>>>>>> Extender.java:153)
>>>>>>>>> org.apache.felix.framework.********util.EventDispatcher.**
>>>>>>>>> invokeBundleListenerCallback(********EventDispatcher.java:868)
>>>>>>>>> org.apache.felix.framework.********util.EventDispatcher.****
>>>>>>>>> fireEventImmediately(
>>>>>>>>> **EventDispatcher.java:789)
>>>>>>>>> org.apache.felix.framework.********util.EventDispatcher.****
>>>>>>>>> fireBundleEvent(**
>>>>>>>>> EventDispatcher.java:514)
>>>>>>>>> org.apache.felix.framework.********Felix.fireBundleEvent(**
>>>>>>>>> Felix.******
>>>>>>>>> java:4330)
>>>>>>>>> org.apache.felix.framework.********Felix.stopBundle(Felix.**
>>>>>>>>> java:***
>>>>>>>>> ***2451)
>>>>>>>>> org.apache.felix.framework.********Felix$RefreshHelper.stop(******
>>>>>>>>> Felix.java:4715)
>>>>>>>>> org.apache.felix.framework.********Felix.refreshPackages(**
>>>>>>>>> Felix.******
>>>>>>>>> java:4037)
>>>>>>>>> org.apache.felix.framework.********FrameworkWiringImpl.run(**
>>>>>>>>> FrameworkWiringImpl.java:178)
>>>>>>>>> java.lang.Thread.run(Thread.********java:662)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Sat, Dec 22, 2012 at 6:39 PM, Richard S. Hall <
>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>
>>>>>>>>>    wrote:
>>>>>>>>>
>>>>>>>>>>       On 12/22/12 20:41 , Jad Naous wrote:
>>>>>>>>>>
>>>>>>>>>       Thanks! I was building with java6. Don't know if that is the
>>>>>>>>>
>>>>>>>>>> issue.
>>>>>>>>>>
>>>>>>>>>>    Anyway,
>>>>>>>>>>
>>>>>>>>>>> I tested the snapshot, and looks like that fixes it.
>>>>>>>>>>>
>>>>>>>>>>> Any idea when 4.1.0 will be released? Do you know if
>>>>>>>>>>> http://svn.apache.org/viewvc?**********view=revision&revision=**
>>>>>>>>>>> ****<http://svn.apache.org/viewvc?********view=revision&revision=****>
>>>>>>>>>>> **1421958<http://svn.apache.**org/viewvc?******view=**
>>>>>>>>>>> revision&revision=****1421958<http://svn.apache.org/viewvc?******view=revision&revision=****1421958>
>>>>>>>>>>> <http://svn.apache.**org/**viewvc?****view=revision&**
>>>>>>>>>>> revision=**1421958<http://svn.**apache.org/viewvc?****view=**
>>>>>>>>>>> revision&revision=**1421958<http://svn.apache.org/viewvc?****view=revision&revision=**1421958>
>>>>>>>>>>> <http://svn.apache.org/******viewvc?**view=revision&****<http://svn.apache.org/****viewvc?**view=revision&****>
>>>>>>>>>>> revision=1421958<http://svn.**apache.org/**viewvc?**view=**
>>>>>>>>>>> revision&**revision=1421958<http://svn.apache.org/**viewvc?**view=revision&**revision=1421958>
>>>>>>>>>>> <http://svn.**apache.org/**viewvc?**view=**revision&**
>>>>>>>>>>> revision=1421958<http://apache.org/viewvc?**view=**revision&revision=1421958>
>>>>>>>>>>> <http://svn.**apache.org/viewvc?**view=**
>>>>>>>>>>> revision&revision=1421958<http://svn.apache.org/viewvc?**view=revision&revision=1421958>
>>>>>>>>>>> <http://svn.apache.org/********viewvc?view=revision&revision=****<http://svn.apache.org/******viewvc?view=revision&revision=**>
>>>>>>>>>>> ****1421958<http://svn.apache.**org/****viewvc?view=revision&**
>>>>>>>>>>> revision=****1421958<http://svn.apache.org/****viewvc?view=revision&revision=****1421958>
>>>>>>>>>>> <http://svn.apache.**org/****viewvc?view=revision&**
>>>>>>>>>>> revision=**1421958<http://svn.**apache.org/**viewvc?view=**
>>>>>>>>>>> revision&revision=**1421958<http://svn.apache.org/**viewvc?view=revision&revision=**1421958>
>>>>>>>>>>> <http://svn.apache.**org/****viewvc?view=revision&****
>>>>>>>>>>> revision=1421958<http://svn.****apache.org/viewvc?view=**<http://apache.org/viewvc?view=**>
>>>>>>>>>>> revision&revision=1421958<http**://svn.apache.org/viewvc?view=**
>>>>>>>>>>> revision&revision=1421958<http://svn.apache.org/viewvc?view=revision&revision=1421958>
>>>>>>>>>>>    will
>>>>>>>>>>>
>>>>>>>>>>>> apply
>>>>>>>>>>>>
>>>>>>>>>>> cleanly onto 4.0.3? Otherwise, how stable do you think is
>>>>>>>>>>> 4.1.0-SNAPSHOT?
>>>>>>>>>>>
>>>>>>>>>>>      The release version will be 4.2.0, but the 4.1.0-SNAPSHOT
>>>>>>>>>>> build
>>>>>>>>>>> should
>>>>>>>>>>>
>>>>>>>>>>>    be
>>>>>>>>>>>
>>>>>>>>>> reasonably stable. We try to keep trunk stable.
>>>>>>>>>>
>>>>>>>>>> I want to try to get a release out soon, but I don't have a
>>>>>>>>>> specific
>>>>>>>>>> time
>>>>>>>>>> table. I'll try to get in done in January if all goes well.
>>>>>>>>>>
>>>>>>>>>> -> richard
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>      Thanks!
>>>>>>>>>>
>>>>>>>>>>    Jad.
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Fri, Dec 21, 2012 at 6:49 AM, Richard S. Hall <
>>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>>
>>>>>>>>>>>     wrote:
>>>>>>>>>>>
>>>>>>>>>>>         It built fine for me. I'm was building with Java 7.
>>>>>>>>>>>>      Regardless, I deployed snapshots of framework, main, and
>>>>>>>>>>>   main.distribution, so just grab what you want from the Apache
>>>>>>>>>>>> snapshot
>>>>>>>>>>>> repo
>>>>>>>>>>>> to try it out.
>>>>>>>>>>>>
>>>>>>>>>>>> -> richard
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On 12/20/12 18:56 , Jad Naous wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>       It does look like the same issue.
>>>>>>>>>>>>
>>>>>>>>>>>>     Got the trunk/framework. mvn clean install gives:
>>>>>>>>>>>>
>>>>>>>>>>>>   [INFO] --- maven-compiler-plugin:2.3.2:************compile
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> (default-compile) @
>>>>>>>>>>>>> org.apache.felix.framework ---
>>>>>>>>>>>>> Dec 20, 2012 3:54:59 PM org.sonatype.guice.bean.****
>>>>>>>>>>>>> reflect.Logs$JULSink
>>>>>>>>>>>>> warn
>>>>>>>>>>>>> WARNING: Error injecting: org.apache.maven.plugin.************
>>>>>>>>>>>>> CompilerMojo
>>>>>>>>>>>>> java.lang.************NoClassDefFoundError:
>>>>>>>>>>>>> org/codehaus/plexus/compiler/************util/scan/******
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> InclusionScanException
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>> jad.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Thu, Dec 20, 2012 at 3:22 PM, Richard S. Hall <
>>>>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>>>>
>>>>>>>>>>>>>      wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>          On 12/20/12 4:10 PM, Jad Naous wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>>          If a bundle undergoes a refresh while ipojo is still
>>>>>>>>>>>>>>
>>>>>>>>>>>>> initializing
>>>>>>>>>>>>>
>>>>>>>>>>>>>       components, a deadlock can happen.  The issue is that if
>>>>>>>>>>>>>
>>>>>>>>>>>>>> ipojo is
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>    attempting to register a service, it will be doing it while
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> synchronizing
>>>>>>>>>>>>>>> on the InstanceCreator instance. It will then try to register
>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>> service
>>>>>>>>>>>>>>> which requires the framework's global lock.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>        Registering a service doesn't require a global, just a
>>>>>>>>>>>>>>> bundle
>>>>>>>>>>>>>>> lock.
>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>      think this could be related to:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>             https://issues.apache.org/********<https://issues.apache.org/******>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ******jira/browse/FELIX-3761<h**ttps://issues.apache.org/*****
>>>>>>>>>>>>>> *******jira/browse/FELIX-3761<https://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>> <h**ttps://issues.apache.org/************jira/browse/FELIX-**
>>>>>>>>>>>>>> 3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>> <https://issues.apache.**org/********jira/browse/FELIX-**3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>> <htt**ps://issues.apache.org/************jira/browse/FELIX-**
>>>>>>>>>>>>>> 3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>>> <http://issues.apache.org/**********jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>> <**https://issues.apache.org/**********jira/browse/FELIX-3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>> <**https://issues.apache.org/********jira/browse/FELIX-3761<https://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>> <https**://issues.apache.org/**********jira/**browse/FELIX-**
>>>>>>>>>>>>>> 3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>> <**http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <ht**tps://issues.apache.org/**********jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>>> <**http://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>> <ht**tps://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>>> <ht**tps://issues.apache.org/******jira/browse/FELIX-3761<https://issues.apache.org/****jira/browse/FELIX-3761>
>>>>>>>>>>>>>> <https:/**/issues.apache.org/**********jira/**browse/FELIX-**
>>>>>>>>>>>>>> 3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>> <**http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <ht**tp://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <http**s://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <http**s://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <http**s://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <http**s://issues.apache.org/**jira/**browse/FELIX-3761<https://issues.apache.org/**jira/browse/FELIX-3761>
>>>>>>>>>>>>>> <https:/**/issues.apache.org/**********jira/**browse/FELIX-**
>>>>>>>>>>>>>> 3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> **>
>>>>>>>>>>>>>> <**http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <ht**tp://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <http**://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <https**://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <ht**tp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <http**://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <https**://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <http**://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <https**://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <http**://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <https**://issues.apache.org/**jira/**browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3761<https://issues.apache.org/jira/browse/FELIX-3761>
>>>>>>>>>>>>>> This avoid grabbing the bundle lock when registering a service,
>>>>>>>>>>>>>> so
>>>>>>>>>>>>>> maybe
>>>>>>>>>>>>>> it will help your situation. You could try to build the
>>>>>>>>>>>>>> framework
>>>>>>>>>>>>>> from
>>>>>>>>>>>>>> trunk and see if it makes a difference.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> If you aren't able to build from trunk, let me know and I'll
>>>>>>>>>>>>>> try
>>>>>>>>>>>>>> to
>>>>>>>>>>>>>> publish a snapshot build since I don't think we have a recent
>>>>>>>>>>>>>> one
>>>>>>>>>>>>>> (we
>>>>>>>>>>>>>> should do this no matter what).
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -> richard
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>        If a refresh is happening in another thread, the refresh
>>>>>>>>>>>>>> will
>>>>>>>>>>>>>> be
>>>>>>>>>>>>>> holding
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>      the framework's global lock, which will then call IPOJO's
>>>>>>>>>>>>>> extender,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>    which
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> then attempts to call a method on InstanceCreator, hence
>>>>>>>>>>>>>>> leading
>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>> deadlock.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Here are the stack traces:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Daemon Thread [Thread-1] (Suspended)
>>>>>>>>>>>>>>> Object.wait(long) line: not available [native method]
>>>>>>>>>>>>>>> Object[](Object).wait() line: 485
>>>>>>>>>>>>>>> Felix.acquireBundleLock(**************BundleImpl, int) line:
>>>>>>>>>>>>>>> 4871
>>>>>>>>>>>>>>> Felix.registerService(**************BundleImpl, String[],
>>>>>>>>>>>>>>> Object,
>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>> 3205
>>>>>>>>>>>>>>> BundleContextImpl.**************registerService(String[],
>>>>>>>>>>>>>>> Object,
>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>> 346
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> IPojoContext.registerService(**************String[], Object,
>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>> 385
>>>>>>>>>>>>>>> ProvidedService.**************registerService() line: 362
>>>>>>>>>>>>>>> ProvidedServiceHandler.__M_**************stateChanged(int)
>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>> 509
>>>>>>>>>>>>>>> ProvidedServiceHandler.**************stateChanged(int) line:
>>>>>>>>>>>>>>> not
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> available
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> InstanceManager.setState(int) line: 536
>>>>>>>>>>>>>>> InstanceManager.start() line: 418
>>>>>>>>>>>>>>> ComponentFactory.**************createInstance(Dictionary,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> IPojoContext,
>>>>>>>>>>>>>>> HandlerManager[])
>>>>>>>>>>>>>>> line: 179
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> ComponentFactory(IPojoFactory)**************.**
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>>>>>> Dictionary,
>>>>>>>>>>>>>>> ServiceContext) line: 310
>>>>>>>>>>>>>>> ComponentFactory(IPojoFactory)**************.**
>>>>>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>>> line: 239
>>>>>>>>>>>>>>> InstanceCreator$**************ManagedInstance.create(********
>>>>>>>>>>>>>>> ******
>>>>>>>>>>>>>>> IPojoFactory)
>>>>>>>>>>>>>>> line: 355
>>>>>>>>>>>>>>> InstanceCreator.addInstance(**************Dictionary, long)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> line: 89
>>>>>>>>>>>>>>> Extender.parse(Bundle, String) line: 306
>>>>>>>>>>>>>>> Extender.startManagementFor(**************Bundle) line: 237
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Extender.access$600(Extender, Bundle) line: 52
>>>>>>>>>>>>>>> Extender$CreatorThread.run() line: 769
>>>>>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Daemon Thread [FelixFrameworkWiring] (Suspended)
>>>>>>>>>>>>>>> InstanceCreator.**************removeInstancesFromBundle(*****
>>>>>>>>>>>>>>> *****
>>>>>>>>>>>>>>> ****long)
>>>>>>>>>>>>>>> line: 116
>>>>>>>>>>>>>>> Extender.closeManagementFor(**************Bundle) line: 171
>>>>>>>>>>>>>>> Extender.bundleChanged(**************BundleEvent) line: 153
>>>>>>>>>>>>>>> EventDispatcher.**************invokeBundleListenerCallback(**
>>>>>>>>>>>>>>> ***
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> ****
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> *****Bundle,
>>>>>>>>>>>>>>> EventListener,
>>>>>>>>>>>>>>> EventObject) line: 868
>>>>>>>>>>>>>>> EventDispatcher.**************fireEventImmediately(********
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> EventDispatcher,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> int, Map,
>>>>>>>>>>>>>>> EventObject, Dictionary) line: 789
>>>>>>>>>>>>>>> EventDispatcher.**************fireBundleEvent(BundleEvent,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Framework)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 514
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Felix.fireBundleEvent(int, Bundle) line: 4244
>>>>>>>>>>>>>>> Felix.stopBundle(BundleImpl, boolean) line: 2351
>>>>>>>>>>>>>>> Felix$RefreshHelper.stop() line: 4629
>>>>>>>>>>>>>>> Felix.refreshPackages(**************Collection,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> FrameworkListener[])
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 3951
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> FrameworkWiringImpl.run() line: 172
>>>>>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>


Re: IPOJO initialization + refresh deadlock

Posted by Jad Naous <ja...@nerati.com>.
On Tue, Jan 1, 2013 at 9:16 AM, Richard S. Hall <he...@ungoverned.org>wrote:

>
> On 1/1/13 11:51, Jad Naous wrote:
>
>> On Tue, Jan 1, 2013 at 8:30 AM, Richard S. Hall <heavy@ungoverned.org
>> >wrote:
>>
>>  On 1/1/13 11:13, Jad Naous wrote:
>>>
>>>  On Tue, Jan 1, 2013 at 7:58 AM, Richard S. Hall <heavy@ungoverned.org
>>>>
>>>>> wrote:
>>>>>
>>>>   On 1/1/13 10:37, Jad Naous wrote:
>>>>
>>>>>   On Tue, Jan 1, 2013 at 6:21 AM, Richard S. Hall<heavy@ungoverned.org
>>>>> >**
>>>>>
>>>>>> wrote:
>>>>>>
>>>>>>    On 1/1/13 06:09, Jad Naous wrote:
>>>>>>
>>>>>>     Happy new year!
>>>>>>>
>>>>>>>  I'm running into another deadlock now. It seems like there needs to
>>>>>>>> be a
>>>>>>>> more rigorous study of how locking is used in the framework. In
>>>>>>>> particular,
>>>>>>>> it seems like the framework should not be invoking any listeners
>>>>>>>> within
>>>>>>>> the
>>>>>>>> same thread that's executing the stopping/starting/refreshing of
>>>>>>>> bundles...
>>>>>>>> Anywhere that happens there will be a potential for a deadlock
>>>>>>>> because
>>>>>>>> of
>>>>>>>> a
>>>>>>>> misordering of lock acquisition. The framework should never call
>>>>>>>> into
>>>>>>>> user
>>>>>>>> code with any locks held.
>>>>>>>>
>>>>>>>>    Yeah, tell me about it, but it is not possible in all cases,
>>>>>>>>
>>>>>>>>  unfortunately. I personally feel that all events should be
>>>>>>> asynchronous,
>>>>>>> but that's another story.
>>>>>>>
>>>>>>> -> richard
>>>>>>>
>>>>>>>
>>>>>>>    I'm happy to help fix this, but I need some pointers as to what
>>>>>>> needs to
>>>>>>>
>>>>>>>  happen. For synchronous events, what are the requirements? Or is
>>>>>> this
>>>>>> not
>>>>>> fixable? Can the lock be released before firing the events?
>>>>>>
>>>>>>   I don't think it can be fixed, some of these things are baked into
>>>>>> the
>>>>>>
>>>>> spec. I think the spec even states somewhere that synchronous event
>>>>> listeners must be careful since they may be holding framework locks, so
>>>>> they shouldn't try to do too much. Of course, that is not easy advice
>>>>> to
>>>>> follow since framework impls vary.
>>>>>
>>>>> We even have bugs open that say we aren't holding locks when we should
>>>>> be,
>>>>> e.g.:
>>>>>
>>>>>       https://issues.apache.org/******jira/browse/FELIX-3806<https://issues.apache.org/****jira/browse/FELIX-3806>
>>>>> <https:/**/issues.apache.org/**jira/**browse/FELIX-3806<https://issues.apache.org/**jira/browse/FELIX-3806>
>>>>> >
>>>>> <https:/**/issues.apache.org/**jira/**browse/FELIX-3806<http://issues.apache.org/jira/**browse/FELIX-3806>
>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3806<https://issues.apache.org/jira/browse/FELIX-3806>
>>>>> >
>>>>>
>>>>>
>>>>> This is one of the poorly designed parts of the OSGi spec. It was meant
>>>>> to
>>>>> work in a world were services can "come and go at anytime", but it
>>>>> allows
>>>>> users to clings to synchronous events to do tons of work.
>>>>>
>>>>>   Then I guess this is something that ipojo is doing incorrectly?
>>>>>
>>>> Hard for me to say, but if there is a case where we can fire events
>>> without holding locks, then you are correct in saying that we should try
>>> to
>>> avoid doing so. Likewise, users should avoid doing too much when they
>>> receive synchronous events.
>>>
>>>  Well, iPOJO is not doing anything. It is just loading a class, and
>> that's
>> what's causing the global lock to be acquired.
>>
>
> You're really going to make me look into this, aren't you? ;-)
>
>
:) Thanks from me and the tons of other people using this framework!


> I'm not sure what is going on, but for whatever reason you are in the
> middle of a refresh (which requires global lock) while it appears that
> iPOJO is starting to manage a new bundle, which ultimately results in
> someone trying to do a dynamic import (which also requires global lock).
>
> There isn't much we can do in this case other than try to detect it and
> fail for the global lock acquire...
>

And ipojo will have to deal... Seems simpler if ipojo didn't try to
unregister services or do that sort of thing (or at least not acquire any
locks of its own) synchronously.


> -> richard
>
>
>>
>>  -> richard
>>>
>>>
>>>    -> richard
>>>>
>>>>>
>>>>>     Name: Thread-2
>>>>>
>>>>>> State: WAITING on [Ljava.lang.Object;@4a018e1b
>>>>>>>
>>>>>>>> Total blocked: 38,871,649  Total waited: 38,871,650
>>>>>>>>
>>>>>>>> Stack trace:
>>>>>>>>      java.lang.Object.wait(Native Method)
>>>>>>>> java.lang.Object.wait(Object.********java:485)
>>>>>>>> org.apache.felix.framework.********Felix.acquireGlobalLock(****
>>>>>>>> Felix.**
>>>>>>>> **java:5033)
>>>>>>>> org.apache.felix.framework.********StatefulResolver.resolve(**
>>>>>>>> StatefulResolver.java:451)
>>>>>>>> org.apache.felix.framework.********BundleWiringImpl.****
>>>>>>>> searchDynamicImports(**
>>>>>>>> BundleWiringImpl.java:1578)
>>>>>>>> org.apache.felix.framework.********BundleWiringImpl.**
>>>>>>>> findClassOrResourceByDelegatio********n(BundleWiringImpl.java:**
>>>>>>>> ****1478)
>>>>>>>> org.apache.felix.framework.********BundleWiringImpl.access$**
>>>>>>>> 400(****
>>>>>>>> BundleWiringImpl.java:75)
>>>>>>>> org.apache.felix.framework.********BundleWiringImpl$**
>>>>>>>> BundleClassLoader.loadClass(********BundleWiringImpl.java:**1882)
>>>>>>>> java.lang.ClassLoader.********loadClass(ClassLoader.java:*****
>>>>>>>> ***247)
>>>>>>>> org.apache.felix.framework.********BundleWiringImpl.****
>>>>>>>> getClassByDelegation(**
>>>>>>>> BundleWiringImpl.java:1356)
>>>>>>>> org.apache.felix.framework.********ServiceRegistrationImpl$**
>>>>>>>> ServiceReferenceImpl.********isAssignableTo(****
>>>>>>>> ServiceRegistrationImpl.java:********
>>>>>>>> 548)
>>>>>>>> org.apache.felix.framework.********util.Util.****
>>>>>>>> isServiceAssignable(****
>>>>>>>> Util.java:280)
>>>>>>>> org.apache.felix.framework.********util.EventDispatcher.**
>>>>>>>> invokeServiceListenerCallback(********EventDispatcher.java:**916)
>>>>>>>> org.apache.felix.framework.********util.EventDispatcher.****
>>>>>>>> fireEventImmediately(
>>>>>>>> **EventDispatcher.java:793)
>>>>>>>> org.apache.felix.framework.********util.EventDispatcher.****
>>>>>>>> fireServiceEvent(**
>>>>>>>> EventDispatcher.java:543)
>>>>>>>> org.apache.felix.framework.********Felix.fireServiceEvent(**
>>>>>>>> Felix.*****
>>>>>>>> *java:4346)
>>>>>>>> org.apache.felix.framework.********Felix.registerService(**
>>>>>>>> Felix.******
>>>>>>>> java:3356)
>>>>>>>> org.apache.felix.framework.********BundleContextImpl.******
>>>>>>>> registerService(**
>>>>>>>> BundleContextImpl.java:346)
>>>>>>>> org.apache.felix.ipojo.********IPojoFactory.start(****
>>>>>>>> IPojoFactory.java:613)
>>>>>>>>        - locked org.apache.felix.ipojo.********
>>>>>>>> ComponentFactory@468034b6
>>>>>>>> org.apache.felix.ipojo.********Extender.********
>>>>>>>> createAbstractFactory(**
>>>>>>>> Extender.java:520)
>>>>>>>> org.apache.felix.ipojo.********Extender.parse(Extender.java:***
>>>>>>>> *****301)
>>>>>>>> org.apache.felix.ipojo.********Extender.startManagementFor(********
>>>>>>>> Extender.java:237)
>>>>>>>> org.apache.felix.ipojo.********Extender.access$600(Extender.*****
>>>>>>>> ***java:52)
>>>>>>>> org.apache.felix.ipojo.********Extender$CreatorThread.run(********
>>>>>>>> Extender.java:769)
>>>>>>>> java.lang.Thread.run(Thread.********java:662)
>>>>>>>>
>>>>>>>>
>>>>>>>> Name: FelixFrameworkWiring
>>>>>>>> State: BLOCKED on org.apache.felix.ipojo.****
>>>>>>>>
>>>>>>>> ComponentFactory@468034b6owned
>>>>>>>>
>>>>>>>> by: Thread-2
>>>>>>>> Total blocked: 7  Total waited: 1
>>>>>>>>
>>>>>>>> Stack trace:
>>>>>>>>      org.apache.felix.ipojo.********IPojoFactory.****
>>>>>>>> removeFactoryStateListener(**
>>>>>>>> IPojoFactory.java:511)
>>>>>>>> org.apache.felix.ipojo.********InstanceCreator.removeFactory(**
>>>>>>>> ******
>>>>>>>> InstanceCreator.java:199)
>>>>>>>> org.apache.felix.ipojo.********Extender.closeManagementFor(********
>>>>>>>> Extender.java:180)
>>>>>>>> org.apache.felix.ipojo.********Extender.bundleChanged(****
>>>>>>>> Extender.java:153)
>>>>>>>> org.apache.felix.framework.********util.EventDispatcher.**
>>>>>>>> invokeBundleListenerCallback(********EventDispatcher.java:868)
>>>>>>>> org.apache.felix.framework.********util.EventDispatcher.****
>>>>>>>> fireEventImmediately(
>>>>>>>> **EventDispatcher.java:789)
>>>>>>>> org.apache.felix.framework.********util.EventDispatcher.****
>>>>>>>> fireBundleEvent(**
>>>>>>>> EventDispatcher.java:514)
>>>>>>>> org.apache.felix.framework.********Felix.fireBundleEvent(**
>>>>>>>> Felix.******
>>>>>>>> java:4330)
>>>>>>>> org.apache.felix.framework.********Felix.stopBundle(Felix.**
>>>>>>>> java:***
>>>>>>>> ***2451)
>>>>>>>> org.apache.felix.framework.********Felix$RefreshHelper.stop(******
>>>>>>>> Felix.java:4715)
>>>>>>>> org.apache.felix.framework.********Felix.refreshPackages(**
>>>>>>>> Felix.******
>>>>>>>> java:4037)
>>>>>>>> org.apache.felix.framework.********FrameworkWiringImpl.run(**
>>>>>>>> FrameworkWiringImpl.java:178)
>>>>>>>> java.lang.Thread.run(Thread.********java:662)
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Sat, Dec 22, 2012 at 6:39 PM, Richard S. Hall <
>>>>>>>> heavy@ungoverned.org
>>>>>>>>
>>>>>>>>   wrote:
>>>>>>>>
>>>>>>>>>      On 12/22/12 20:41 , Jad Naous wrote:
>>>>>>>>>
>>>>>>>>      Thanks! I was building with java6. Don't know if that is the
>>>>>>>>
>>>>>>>>> issue.
>>>>>>>>>
>>>>>>>>>   Anyway,
>>>>>>>>>
>>>>>>>>>> I tested the snapshot, and looks like that fixes it.
>>>>>>>>>>
>>>>>>>>>> Any idea when 4.1.0 will be released? Do you know if
>>>>>>>>>> http://svn.apache.org/viewvc?**********view=revision&revision=**
>>>>>>>>>> ****<http://svn.apache.org/viewvc?********view=revision&revision=****>
>>>>>>>>>> **1421958<http://svn.apache.**org/viewvc?******view=**
>>>>>>>>>> revision&revision=****1421958<http://svn.apache.org/viewvc?******view=revision&revision=****1421958>
>>>>>>>>>> >
>>>>>>>>>> <http://svn.apache.**org/**viewvc?****view=revision&**
>>>>>>>>>> revision=**1421958<http://svn.**apache.org/viewvc?****view=**
>>>>>>>>>> revision&revision=**1421958<http://svn.apache.org/viewvc?****view=revision&revision=**1421958>
>>>>>>>>>> >
>>>>>>>>>> <http://svn.apache.org/******viewvc?**view=revision&****<http://svn.apache.org/****viewvc?**view=revision&****>
>>>>>>>>>> revision=1421958<http://svn.**apache.org/**viewvc?**view=**
>>>>>>>>>> revision&**revision=1421958<http://svn.apache.org/**viewvc?**view=revision&**revision=1421958>
>>>>>>>>>> >
>>>>>>>>>> <http://svn.**apache.org/**viewvc?**view=**revision&**
>>>>>>>>>> revision=1421958<http://apache.org/viewvc?**view=**revision&revision=1421958>
>>>>>>>>>> <http://svn.**apache.org/viewvc?**view=**
>>>>>>>>>> revision&revision=1421958<http://svn.apache.org/viewvc?**view=revision&revision=1421958>
>>>>>>>>>> >
>>>>>>>>>> <http://svn.apache.org/********viewvc?view=revision&revision=****<http://svn.apache.org/******viewvc?view=revision&revision=**>
>>>>>>>>>> ****1421958<http://svn.apache.**org/****viewvc?view=revision&**
>>>>>>>>>> revision=****1421958<http://svn.apache.org/****viewvc?view=revision&revision=****1421958>
>>>>>>>>>> >
>>>>>>>>>> <http://svn.apache.**org/****viewvc?view=revision&**
>>>>>>>>>> revision=**1421958<http://svn.**apache.org/**viewvc?view=**
>>>>>>>>>> revision&revision=**1421958<http://svn.apache.org/**viewvc?view=revision&revision=**1421958>
>>>>>>>>>> >
>>>>>>>>>> <http://svn.apache.**org/****viewvc?view=revision&****
>>>>>>>>>> revision=1421958<http://svn.****apache.org/viewvc?view=**<http://apache.org/viewvc?view=**>
>>>>>>>>>> revision&revision=1421958<http**://svn.apache.org/viewvc?view=**
>>>>>>>>>> revision&revision=1421958<http://svn.apache.org/viewvc?view=revision&revision=1421958>
>>>>>>>>>> >
>>>>>>>>>>
>>>>>>>>>>   will
>>>>>>>>>>
>>>>>>>>>>> apply
>>>>>>>>>>>
>>>>>>>>>> cleanly onto 4.0.3? Otherwise, how stable do you think is
>>>>>>>>>> 4.1.0-SNAPSHOT?
>>>>>>>>>>
>>>>>>>>>>     The release version will be 4.2.0, but the 4.1.0-SNAPSHOT
>>>>>>>>>> build
>>>>>>>>>> should
>>>>>>>>>>
>>>>>>>>>>   be
>>>>>>>>>>
>>>>>>>>> reasonably stable. We try to keep trunk stable.
>>>>>>>>>
>>>>>>>>> I want to try to get a release out soon, but I don't have a
>>>>>>>>> specific
>>>>>>>>> time
>>>>>>>>> table. I'll try to get in done in January if all goes well.
>>>>>>>>>
>>>>>>>>> -> richard
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>     Thanks!
>>>>>>>>>
>>>>>>>>>   Jad.
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Fri, Dec 21, 2012 at 6:49 AM, Richard S. Hall <
>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>
>>>>>>>>>>    wrote:
>>>>>>>>>>
>>>>>>>>>>        It built fine for me. I'm was building with Java 7.
>>>>>>>>>>>
>>>>>>>>>>>     Regardless, I deployed snapshots of framework, main, and
>>>>>>>>>>
>>>>>>>>>>  main.distribution, so just grab what you want from the Apache
>>>>>>>>>>> snapshot
>>>>>>>>>>> repo
>>>>>>>>>>> to try it out.
>>>>>>>>>>>
>>>>>>>>>>> -> richard
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On 12/20/12 18:56 , Jad Naous wrote:
>>>>>>>>>>>
>>>>>>>>>>>      It does look like the same issue.
>>>>>>>>>>>
>>>>>>>>>>>    Got the trunk/framework. mvn clean install gives:
>>>>>>>>>>>
>>>>>>>>>>>  [INFO] --- maven-compiler-plugin:2.3.2:************compile
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> (default-compile) @
>>>>>>>>>>>> org.apache.felix.framework ---
>>>>>>>>>>>> Dec 20, 2012 3:54:59 PM org.sonatype.guice.bean.****
>>>>>>>>>>>> reflect.Logs$JULSink
>>>>>>>>>>>> warn
>>>>>>>>>>>> WARNING: Error injecting: org.apache.maven.plugin.************
>>>>>>>>>>>> CompilerMojo
>>>>>>>>>>>> java.lang.************NoClassDefFoundError:
>>>>>>>>>>>> org/codehaus/plexus/compiler/************util/scan/******
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> InclusionScanException
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> jad.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Thu, Dec 20, 2012 at 3:22 PM, Richard S. Hall <
>>>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>>>
>>>>>>>>>>>>     wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>         On 12/20/12 4:10 PM, Jad Naous wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>>         If a bundle undergoes a refresh while ipojo is still
>>>>>>>>>>>>>
>>>>>>>>>>>> initializing
>>>>>>>>>>>>
>>>>>>>>>>>>      components, a deadlock can happen.  The issue is that if
>>>>>>>>>>>>
>>>>>>>>>>>>> ipojo is
>>>>>>>>>>>>>
>>>>>>>>>>>>>   attempting to register a service, it will be doing it while
>>>>>>>>>>>>>
>>>>>>>>>>>>>> synchronizing
>>>>>>>>>>>>>> on the InstanceCreator instance. It will then try to register
>>>>>>>>>>>>>> a
>>>>>>>>>>>>>> service
>>>>>>>>>>>>>> which requires the framework's global lock.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>       Registering a service doesn't require a global, just a
>>>>>>>>>>>>>> bundle
>>>>>>>>>>>>>> lock.
>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>     think this could be related to:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>            https://issues.apache.org/********<https://issues.apache.org/******>
>>>>>>>>>>>>>>
>>>>>>>>>>>>> ******jira/browse/FELIX-3761<h**ttps://issues.apache.org/*****
>>>>>>>>>>>>> *******jira/browse/FELIX-3761<https://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <h**ttps://issues.apache.org/************jira/browse/FELIX-**
>>>>>>>>>>>>> 3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>> <https://issues.apache.**org/********jira/browse/FELIX-**3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <htt**ps://issues.apache.org/************jira/browse/FELIX-**
>>>>>>>>>>>>> 3761<http://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>>> <http://issues.apache.org/**********jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>> **>
>>>>>>>>>>>>> <**https://issues.apache.org/**********jira/browse/FELIX-3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>> <**https://issues.apache.org/********jira/browse/FELIX-3761<https://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <https**://issues.apache.org/**********jira/**browse/FELIX-**
>>>>>>>>>>>>> 3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>> <http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>> **>
>>>>>>>>>>>>> <**http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <ht**tps://issues.apache.org/**********jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>>> <**http://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <ht**tps://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>>> <ht**tps://issues.apache.org/******jira/browse/FELIX-3761<https://issues.apache.org/****jira/browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <https:/**/issues.apache.org/**********jira/**browse/FELIX-**
>>>>>>>>>>>>> 3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>> <http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>> **>
>>>>>>>>>>>>> <**http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <ht**tp://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <http**s://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>>
>>>>>>>>>>>>> <ht**tp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <http**s://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <http**s://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>> <http**s://issues.apache.org/**jira/**browse/FELIX-3761<https://issues.apache.org/**jira/browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <https:/**/issues.apache.org/**********jira/**browse/FELIX-**
>>>>>>>>>>>>> 3761<http://issues.apache.org/********jira/**browse/FELIX-3761>
>>>>>>>>>>>>> <http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>> **>
>>>>>>>>>>>>> <**http://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>> <h**ttp://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <ht**tp://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <http**://issues.apache.org/******jira/****browse/FELIX-3761<http://issues.apache.org/****jira/****browse/FELIX-3761>
>>>>>>>>>>>>> <h**ttp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/******browse/FELIX-3761<http://issues.apache.org/jira/******browse/FELIX-3761>
>>>>>>>>>>>>> <h**ttp://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>>
>>>>>>>>>>>>> <htt**p://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <https**://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>>
>>>>>>>>>>>>> <ht**tp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <http**://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <https**://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <http**://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <https**://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>>> <http**://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> <https**://issues.apache.org/**jira/**browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3761<https://issues.apache.org/jira/browse/FELIX-3761>
>>>>>>>>>>>>> >
>>>>>>>>>>>>> This avoid grabbing the bundle lock when registering a service,
>>>>>>>>>>>>> so
>>>>>>>>>>>>> maybe
>>>>>>>>>>>>> it will help your situation. You could try to build the
>>>>>>>>>>>>> framework
>>>>>>>>>>>>> from
>>>>>>>>>>>>> trunk and see if it makes a difference.
>>>>>>>>>>>>>
>>>>>>>>>>>>> If you aren't able to build from trunk, let me know and I'll
>>>>>>>>>>>>> try
>>>>>>>>>>>>> to
>>>>>>>>>>>>> publish a snapshot build since I don't think we have a recent
>>>>>>>>>>>>> one
>>>>>>>>>>>>> (we
>>>>>>>>>>>>> should do this no matter what).
>>>>>>>>>>>>>
>>>>>>>>>>>>> -> richard
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>       If a refresh is happening in another thread, the refresh
>>>>>>>>>>>>> will
>>>>>>>>>>>>> be
>>>>>>>>>>>>> holding
>>>>>>>>>>>>>
>>>>>>>>>>>>>     the framework's global lock, which will then call IPOJO's
>>>>>>>>>>>>> extender,
>>>>>>>>>>>>>
>>>>>>>>>>>>>   which
>>>>>>>>>>>>>
>>>>>>>>>>>>>> then attempts to call a method on InstanceCreator, hence
>>>>>>>>>>>>>> leading
>>>>>>>>>>>>>> to
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>> deadlock.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Here are the stack traces:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Daemon Thread [Thread-1] (Suspended)
>>>>>>>>>>>>>> Object.wait(long) line: not available [native method]
>>>>>>>>>>>>>> Object[](Object).wait() line: 485
>>>>>>>>>>>>>> Felix.acquireBundleLock(**************BundleImpl, int) line:
>>>>>>>>>>>>>> 4871
>>>>>>>>>>>>>> Felix.registerService(**************BundleImpl, String[],
>>>>>>>>>>>>>> Object,
>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>> 3205
>>>>>>>>>>>>>> BundleContextImpl.**************registerService(String[],
>>>>>>>>>>>>>> Object,
>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>> 346
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> IPojoContext.registerService(**************String[], Object,
>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>> 385
>>>>>>>>>>>>>> ProvidedService.**************registerService() line: 362
>>>>>>>>>>>>>> ProvidedServiceHandler.__M_**************stateChanged(int)
>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>> 509
>>>>>>>>>>>>>> ProvidedServiceHandler.**************stateChanged(int) line:
>>>>>>>>>>>>>> not
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> available
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> InstanceManager.setState(int) line: 536
>>>>>>>>>>>>>> InstanceManager.start() line: 418
>>>>>>>>>>>>>> ComponentFactory.**************createInstance(Dictionary,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> IPojoContext,
>>>>>>>>>>>>>> HandlerManager[])
>>>>>>>>>>>>>> line: 179
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ComponentFactory(IPojoFactory)**************.**
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>>>>> Dictionary,
>>>>>>>>>>>>>> ServiceContext) line: 310
>>>>>>>>>>>>>> ComponentFactory(IPojoFactory)**************.**
>>>>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>>> line: 239
>>>>>>>>>>>>>> InstanceCreator$**************ManagedInstance.create(********
>>>>>>>>>>>>>> ******
>>>>>>>>>>>>>> IPojoFactory)
>>>>>>>>>>>>>> line: 355
>>>>>>>>>>>>>> InstanceCreator.addInstance(**************Dictionary, long)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> line: 89
>>>>>>>>>>>>>> Extender.parse(Bundle, String) line: 306
>>>>>>>>>>>>>> Extender.startManagementFor(**************Bundle) line: 237
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Extender.access$600(Extender, Bundle) line: 52
>>>>>>>>>>>>>> Extender$CreatorThread.run() line: 769
>>>>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Daemon Thread [FelixFrameworkWiring] (Suspended)
>>>>>>>>>>>>>> InstanceCreator.**************removeInstancesFromBundle(*****
>>>>>>>>>>>>>> *****
>>>>>>>>>>>>>> ****long)
>>>>>>>>>>>>>> line: 116
>>>>>>>>>>>>>> Extender.closeManagementFor(**************Bundle) line: 171
>>>>>>>>>>>>>> Extender.bundleChanged(**************BundleEvent) line: 153
>>>>>>>>>>>>>> EventDispatcher.**************invokeBundleListenerCallback(**
>>>>>>>>>>>>>> ***
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ****
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *****Bundle,
>>>>>>>>>>>>>> EventListener,
>>>>>>>>>>>>>> EventObject) line: 868
>>>>>>>>>>>>>> EventDispatcher.**************fireEventImmediately(********
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> EventDispatcher,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> int, Map,
>>>>>>>>>>>>>> EventObject, Dictionary) line: 789
>>>>>>>>>>>>>> EventDispatcher.**************fireBundleEvent(BundleEvent,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Framework)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 514
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Felix.fireBundleEvent(int, Bundle) line: 4244
>>>>>>>>>>>>>> Felix.stopBundle(BundleImpl, boolean) line: 2351
>>>>>>>>>>>>>> Felix$RefreshHelper.stop() line: 4629
>>>>>>>>>>>>>> Felix.refreshPackages(**************Collection,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> FrameworkListener[])
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> line:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 3951
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> FrameworkWiringImpl.run() line: 172
>>>>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>

Re: IPOJO initialization + refresh deadlock

Posted by "Richard S. Hall" <he...@ungoverned.org>.
On 1/1/13 11:51, Jad Naous wrote:
> On Tue, Jan 1, 2013 at 8:30 AM, Richard S. Hall <he...@ungoverned.org>wrote:
>
>> On 1/1/13 11:13, Jad Naous wrote:
>>
>>> On Tue, Jan 1, 2013 at 7:58 AM, Richard S. Hall <heavy@ungoverned.org
>>>> wrote:
>>>   On 1/1/13 10:37, Jad Naous wrote:
>>>>   On Tue, Jan 1, 2013 at 6:21 AM, Richard S. Hall<he...@ungoverned.org>**
>>>>> wrote:
>>>>>
>>>>>    On 1/1/13 06:09, Jad Naous wrote:
>>>>>
>>>>>>    Happy new year!
>>>>>>
>>>>>>> I'm running into another deadlock now. It seems like there needs to
>>>>>>> be a
>>>>>>> more rigorous study of how locking is used in the framework. In
>>>>>>> particular,
>>>>>>> it seems like the framework should not be invoking any listeners
>>>>>>> within
>>>>>>> the
>>>>>>> same thread that's executing the stopping/starting/refreshing of
>>>>>>> bundles...
>>>>>>> Anywhere that happens there will be a potential for a deadlock because
>>>>>>> of
>>>>>>> a
>>>>>>> misordering of lock acquisition. The framework should never call into
>>>>>>> user
>>>>>>> code with any locks held.
>>>>>>>
>>>>>>>    Yeah, tell me about it, but it is not possible in all cases,
>>>>>>>
>>>>>> unfortunately. I personally feel that all events should be
>>>>>> asynchronous,
>>>>>> but that's another story.
>>>>>>
>>>>>> -> richard
>>>>>>
>>>>>>
>>>>>>    I'm happy to help fix this, but I need some pointers as to what
>>>>>> needs to
>>>>>>
>>>>> happen. For synchronous events, what are the requirements? Or is this
>>>>> not
>>>>> fixable? Can the lock be released before firing the events?
>>>>>
>>>>>   I don't think it can be fixed, some of these things are baked into the
>>>> spec. I think the spec even states somewhere that synchronous event
>>>> listeners must be careful since they may be holding framework locks, so
>>>> they shouldn't try to do too much. Of course, that is not easy advice to
>>>> follow since framework impls vary.
>>>>
>>>> We even have bugs open that say we aren't holding locks when we should
>>>> be,
>>>> e.g.:
>>>>
>>>>       https://issues.apache.org/****jira/browse/FELIX-3806<https://issues.apache.org/**jira/browse/FELIX-3806>
>>>> <https:/**/issues.apache.org/jira/**browse/FELIX-3806<https://issues.apache.org/jira/browse/FELIX-3806>
>>>>
>>>> This is one of the poorly designed parts of the OSGi spec. It was meant
>>>> to
>>>> work in a world were services can "come and go at anytime", but it allows
>>>> users to clings to synchronous events to do tons of work.
>>>>
>>>>   Then I guess this is something that ipojo is doing incorrectly?
>> Hard for me to say, but if there is a case where we can fire events
>> without holding locks, then you are correct in saying that we should try to
>> avoid doing so. Likewise, users should avoid doing too much when they
>> receive synchronous events.
>>
> Well, iPOJO is not doing anything. It is just loading a class, and that's
> what's causing the global lock to be acquired.

You're really going to make me look into this, aren't you? ;-)

I'm not sure what is going on, but for whatever reason you are in the 
middle of a refresh (which requires global lock) while it appears that 
iPOJO is starting to manage a new bundle, which ultimately results in 
someone trying to do a dynamic import (which also requires global lock).

There isn't much we can do in this case other than try to detect it and 
fail for the global lock acquire...

-> richard

>
>
>> -> richard
>>
>>
>>>   -> richard
>>>>
>>>>     Name: Thread-2
>>>>>> State: WAITING on [Ljava.lang.Object;@4a018e1b
>>>>>>> Total blocked: 38,871,649  Total waited: 38,871,650
>>>>>>>
>>>>>>> Stack trace:
>>>>>>>      java.lang.Object.wait(Native Method)
>>>>>>> java.lang.Object.wait(Object.******java:485)
>>>>>>> org.apache.felix.framework.******Felix.acquireGlobalLock(**Felix.**
>>>>>>> **java:5033)
>>>>>>> org.apache.felix.framework.******StatefulResolver.resolve(**
>>>>>>> StatefulResolver.java:451)
>>>>>>> org.apache.felix.framework.******BundleWiringImpl.****
>>>>>>> searchDynamicImports(**
>>>>>>> BundleWiringImpl.java:1578)
>>>>>>> org.apache.felix.framework.******BundleWiringImpl.**
>>>>>>> findClassOrResourceByDelegatio******n(BundleWiringImpl.java:****1478)
>>>>>>> org.apache.felix.framework.******BundleWiringImpl.access$400(****
>>>>>>> BundleWiringImpl.java:75)
>>>>>>> org.apache.felix.framework.******BundleWiringImpl$**
>>>>>>> BundleClassLoader.loadClass(******BundleWiringImpl.java:1882)
>>>>>>> java.lang.ClassLoader.******loadClass(ClassLoader.java:******247)
>>>>>>> org.apache.felix.framework.******BundleWiringImpl.****
>>>>>>> getClassByDelegation(**
>>>>>>> BundleWiringImpl.java:1356)
>>>>>>> org.apache.felix.framework.******ServiceRegistrationImpl$**
>>>>>>> ServiceReferenceImpl.******isAssignableTo(****
>>>>>>> ServiceRegistrationImpl.java:******
>>>>>>> 548)
>>>>>>> org.apache.felix.framework.******util.Util.**isServiceAssignable(****
>>>>>>> Util.java:280)
>>>>>>> org.apache.felix.framework.******util.EventDispatcher.**
>>>>>>> invokeServiceListenerCallback(******EventDispatcher.java:916)
>>>>>>> org.apache.felix.framework.******util.EventDispatcher.****
>>>>>>> fireEventImmediately(
>>>>>>> **EventDispatcher.java:793)
>>>>>>> org.apache.felix.framework.******util.EventDispatcher.****
>>>>>>> fireServiceEvent(**
>>>>>>> EventDispatcher.java:543)
>>>>>>> org.apache.felix.framework.******Felix.fireServiceEvent(Felix.*****
>>>>>>> *java:4346)
>>>>>>> org.apache.felix.framework.******Felix.registerService(Felix.******
>>>>>>> java:3356)
>>>>>>> org.apache.felix.framework.******BundleContextImpl.******
>>>>>>> registerService(**
>>>>>>> BundleContextImpl.java:346)
>>>>>>> org.apache.felix.ipojo.******IPojoFactory.start(****
>>>>>>> IPojoFactory.java:613)
>>>>>>>        - locked org.apache.felix.ipojo.******ComponentFactory@468034b6
>>>>>>> org.apache.felix.ipojo.******Extender.******createAbstractFactory(**
>>>>>>> Extender.java:520)
>>>>>>> org.apache.felix.ipojo.******Extender.parse(Extender.java:******301)
>>>>>>> org.apache.felix.ipojo.******Extender.startManagementFor(******
>>>>>>> Extender.java:237)
>>>>>>> org.apache.felix.ipojo.******Extender.access$600(Extender.***
>>>>>>> ***java:52)
>>>>>>> org.apache.felix.ipojo.******Extender$CreatorThread.run(******
>>>>>>> Extender.java:769)
>>>>>>> java.lang.Thread.run(Thread.******java:662)
>>>>>>>
>>>>>>> Name: FelixFrameworkWiring
>>>>>>> State: BLOCKED on org.apache.felix.ipojo.****
>>>>>>>
>>>>>>> ComponentFactory@468034b6owned
>>>>>>>
>>>>>>> by: Thread-2
>>>>>>> Total blocked: 7  Total waited: 1
>>>>>>>
>>>>>>> Stack trace:
>>>>>>>      org.apache.felix.ipojo.******IPojoFactory.****
>>>>>>> removeFactoryStateListener(**
>>>>>>> IPojoFactory.java:511)
>>>>>>> org.apache.felix.ipojo.******InstanceCreator.removeFactory(******
>>>>>>> InstanceCreator.java:199)
>>>>>>> org.apache.felix.ipojo.******Extender.closeManagementFor(******
>>>>>>> Extender.java:180)
>>>>>>> org.apache.felix.ipojo.******Extender.bundleChanged(****
>>>>>>> Extender.java:153)
>>>>>>> org.apache.felix.framework.******util.EventDispatcher.**
>>>>>>> invokeBundleListenerCallback(******EventDispatcher.java:868)
>>>>>>> org.apache.felix.framework.******util.EventDispatcher.****
>>>>>>> fireEventImmediately(
>>>>>>> **EventDispatcher.java:789)
>>>>>>> org.apache.felix.framework.******util.EventDispatcher.****
>>>>>>> fireBundleEvent(**
>>>>>>> EventDispatcher.java:514)
>>>>>>> org.apache.felix.framework.******Felix.fireBundleEvent(Felix.******
>>>>>>> java:4330)
>>>>>>> org.apache.felix.framework.******Felix.stopBundle(Felix.java:***
>>>>>>> ***2451)
>>>>>>> org.apache.felix.framework.******Felix$RefreshHelper.stop(****
>>>>>>> Felix.java:4715)
>>>>>>> org.apache.felix.framework.******Felix.refreshPackages(Felix.******
>>>>>>> java:4037)
>>>>>>> org.apache.felix.framework.******FrameworkWiringImpl.run(**
>>>>>>> FrameworkWiringImpl.java:178)
>>>>>>> java.lang.Thread.run(Thread.******java:662)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Sat, Dec 22, 2012 at 6:39 PM, Richard S. Hall <
>>>>>>> heavy@ungoverned.org
>>>>>>>
>>>>>>>   wrote:
>>>>>>>>      On 12/22/12 20:41 , Jad Naous wrote:
>>>>>>>      Thanks! I was building with java6. Don't know if that is the
>>>>>>>> issue.
>>>>>>>>
>>>>>>>>   Anyway,
>>>>>>>>> I tested the snapshot, and looks like that fixes it.
>>>>>>>>>
>>>>>>>>> Any idea when 4.1.0 will be released? Do you know if
>>>>>>>>> http://svn.apache.org/viewvc?********view=revision&revision=****
>>>>>>>>> **1421958<http://svn.apache.org/viewvc?******view=revision&revision=****1421958>
>>>>>>>>> <http://svn.apache.**org/viewvc?****view=revision&**
>>>>>>>>> revision=**1421958<http://svn.apache.org/viewvc?****view=revision&revision=**1421958>
>>>>>>>>> <http://svn.apache.org/****viewvc?**view=revision&****
>>>>>>>>> revision=1421958<http://svn.apache.org/**viewvc?**view=revision&**revision=1421958>
>>>>>>>>> <http://svn.**apache.org/viewvc?**view=**revision&revision=1421958<http://svn.apache.org/viewvc?**view=revision&revision=1421958>
>>>>>>>>> <http://svn.apache.org/******viewvc?view=revision&revision=**
>>>>>>>>> ****1421958<http://svn.apache.org/****viewvc?view=revision&revision=****1421958>
>>>>>>>>> <http://svn.apache.**org/**viewvc?view=revision&**
>>>>>>>>> revision=**1421958<http://svn.apache.org/**viewvc?view=revision&revision=**1421958>
>>>>>>>>> <http://svn.apache.**org/**viewvc?view=revision&****
>>>>>>>>> revision=1421958<http://svn.**apache.org/viewvc?view=**
>>>>>>>>> revision&revision=1421958<http://svn.apache.org/viewvc?view=revision&revision=1421958>
>>>>>>>>>   will
>>>>>>>>>> apply
>>>>>>>>> cleanly onto 4.0.3? Otherwise, how stable do you think is
>>>>>>>>> 4.1.0-SNAPSHOT?
>>>>>>>>>
>>>>>>>>>     The release version will be 4.2.0, but the 4.1.0-SNAPSHOT build
>>>>>>>>> should
>>>>>>>>>
>>>>>>>>>   be
>>>>>>>> reasonably stable. We try to keep trunk stable.
>>>>>>>>
>>>>>>>> I want to try to get a release out soon, but I don't have a specific
>>>>>>>> time
>>>>>>>> table. I'll try to get in done in January if all goes well.
>>>>>>>>
>>>>>>>> -> richard
>>>>>>>>
>>>>>>>>
>>>>>>>>     Thanks!
>>>>>>>>
>>>>>>>>   Jad.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Fri, Dec 21, 2012 at 6:49 AM, Richard S. Hall <
>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>
>>>>>>>>>    wrote:
>>>>>>>>>
>>>>>>>>>>       It built fine for me. I'm was building with Java 7.
>>>>>>>>>>
>>>>>>>>>    Regardless, I deployed snapshots of framework, main, and
>>>>>>>>>
>>>>>>>>>> main.distribution, so just grab what you want from the Apache
>>>>>>>>>> snapshot
>>>>>>>>>> repo
>>>>>>>>>> to try it out.
>>>>>>>>>>
>>>>>>>>>> -> richard
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 12/20/12 18:56 , Jad Naous wrote:
>>>>>>>>>>
>>>>>>>>>>      It does look like the same issue.
>>>>>>>>>>
>>>>>>>>>>    Got the trunk/framework. mvn clean install gives:
>>>>>>>>>>
>>>>>>>>>>> [INFO] --- maven-compiler-plugin:2.3.2:**********compile
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> (default-compile) @
>>>>>>>>>>> org.apache.felix.framework ---
>>>>>>>>>>> Dec 20, 2012 3:54:59 PM org.sonatype.guice.bean.****
>>>>>>>>>>> reflect.Logs$JULSink
>>>>>>>>>>> warn
>>>>>>>>>>> WARNING: Error injecting: org.apache.maven.plugin.**********
>>>>>>>>>>> CompilerMojo
>>>>>>>>>>> java.lang.**********NoClassDefFoundError:
>>>>>>>>>>> org/codehaus/plexus/compiler/**********util/scan/******
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> InclusionScanException
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>> jad.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Thu, Dec 20, 2012 at 3:22 PM, Richard S. Hall <
>>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>>
>>>>>>>>>>>     wrote:
>>>>>>>>>>>
>>>>>>>>>>>         On 12/20/12 4:10 PM, Jad Naous wrote:
>>>>>>>>>>>>         If a bundle undergoes a refresh while ipojo is still
>>>>>>>>>>> initializing
>>>>>>>>>>>
>>>>>>>>>>>      components, a deadlock can happen.  The issue is that if
>>>>>>>>>>>> ipojo is
>>>>>>>>>>>>
>>>>>>>>>>>>   attempting to register a service, it will be doing it while
>>>>>>>>>>>>> synchronizing
>>>>>>>>>>>>> on the InstanceCreator instance. It will then try to register a
>>>>>>>>>>>>> service
>>>>>>>>>>>>> which requires the framework's global lock.
>>>>>>>>>>>>>
>>>>>>>>>>>>>       Registering a service doesn't require a global, just a
>>>>>>>>>>>>> bundle
>>>>>>>>>>>>> lock.
>>>>>>>>>>>>> I
>>>>>>>>>>>>>
>>>>>>>>>>>>>     think this could be related to:
>>>>>>>>>>>>>
>>>>>>>>>>>>>            https://issues.apache.org/******
>>>>>>>>>>>> ******jira/browse/FELIX-3761<https://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>>> <h**ttps://issues.apache.org/**********jira/browse/FELIX-3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>> <htt**ps://issues.apache.org/**********jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>>> <**https://issues.apache.org/********jira/browse/FELIX-3761<https://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>> <https**://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>> <ht**tps://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>>> <ht**tps://issues.apache.org/******jira/browse/FELIX-3761<https://issues.apache.org/****jira/browse/FELIX-3761>
>>>>>>>>>>>> <https:/**/issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>> <ht**tp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>> <http**s://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>> <http**s://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>> <http**s://issues.apache.org/**jira/**browse/FELIX-3761<https://issues.apache.org/**jira/browse/FELIX-3761>
>>>>>>>>>>>> <https:/**/issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>> <ht**tp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>> <http**://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>> <https**://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>> <http**://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>> <https**://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>>> <http**://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>> <https**://issues.apache.org/**jira/**browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3761<https://issues.apache.org/jira/browse/FELIX-3761>
>>>>>>>>>>>> This avoid grabbing the bundle lock when registering a service,
>>>>>>>>>>>> so
>>>>>>>>>>>> maybe
>>>>>>>>>>>> it will help your situation. You could try to build the framework
>>>>>>>>>>>> from
>>>>>>>>>>>> trunk and see if it makes a difference.
>>>>>>>>>>>>
>>>>>>>>>>>> If you aren't able to build from trunk, let me know and I'll try
>>>>>>>>>>>> to
>>>>>>>>>>>> publish a snapshot build since I don't think we have a recent one
>>>>>>>>>>>> (we
>>>>>>>>>>>> should do this no matter what).
>>>>>>>>>>>>
>>>>>>>>>>>> -> richard
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>       If a refresh is happening in another thread, the refresh
>>>>>>>>>>>> will
>>>>>>>>>>>> be
>>>>>>>>>>>> holding
>>>>>>>>>>>>
>>>>>>>>>>>>     the framework's global lock, which will then call IPOJO's
>>>>>>>>>>>> extender,
>>>>>>>>>>>>
>>>>>>>>>>>>   which
>>>>>>>>>>>>> then attempts to call a method on InstanceCreator, hence leading
>>>>>>>>>>>>> to
>>>>>>>>>>>>> the
>>>>>>>>>>>>> deadlock.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Here are the stack traces:
>>>>>>>>>>>>>
>>>>>>>>>>>>> Daemon Thread [Thread-1] (Suspended)
>>>>>>>>>>>>> Object.wait(long) line: not available [native method]
>>>>>>>>>>>>> Object[](Object).wait() line: 485
>>>>>>>>>>>>> Felix.acquireBundleLock(************BundleImpl, int) line: 4871
>>>>>>>>>>>>> Felix.registerService(************BundleImpl, String[], Object,
>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>> line:
>>>>>>>>>>>>> 3205
>>>>>>>>>>>>> BundleContextImpl.************registerService(String[], Object,
>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>> line:
>>>>>>>>>>>>> 346
>>>>>>>>>>>>>
>>>>>>>>>>>>> IPojoContext.registerService(************String[], Object,
>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>> line:
>>>>>>>>>>>>> 385
>>>>>>>>>>>>> ProvidedService.************registerService() line: 362
>>>>>>>>>>>>> ProvidedServiceHandler.__M_************stateChanged(int) line:
>>>>>>>>>>>>> 509
>>>>>>>>>>>>> ProvidedServiceHandler.************stateChanged(int) line: not
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> available
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> InstanceManager.setState(int) line: 536
>>>>>>>>>>>>> InstanceManager.start() line: 418
>>>>>>>>>>>>> ComponentFactory.************createInstance(Dictionary,
>>>>>>>>>>>>>
>>>>>>>>>>>>> IPojoContext,
>>>>>>>>>>>>> HandlerManager[])
>>>>>>>>>>>>> line: 179
>>>>>>>>>>>>>
>>>>>>>>>>>>> ComponentFactory(IPojoFactory)************.**
>>>>>>>>>>>>>
>>>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>>>> Dictionary,
>>>>>>>>>>>>> ServiceContext) line: 310
>>>>>>>>>>>>> ComponentFactory(IPojoFactory)************.**
>>>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>>> line: 239
>>>>>>>>>>>>> InstanceCreator$************ManagedInstance.create(************
>>>>>>>>>>>>> IPojoFactory)
>>>>>>>>>>>>> line: 355
>>>>>>>>>>>>> InstanceCreator.addInstance(************Dictionary, long)
>>>>>>>>>>>>> line: 89
>>>>>>>>>>>>> Extender.parse(Bundle, String) line: 306
>>>>>>>>>>>>> Extender.startManagementFor(************Bundle) line: 237
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Extender.access$600(Extender, Bundle) line: 52
>>>>>>>>>>>>> Extender$CreatorThread.run() line: 769
>>>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>>>
>>>>>>>>>>>>> Daemon Thread [FelixFrameworkWiring] (Suspended)
>>>>>>>>>>>>> InstanceCreator.************removeInstancesFromBundle(********
>>>>>>>>>>>>> ****long)
>>>>>>>>>>>>> line: 116
>>>>>>>>>>>>> Extender.closeManagementFor(************Bundle) line: 171
>>>>>>>>>>>>> Extender.bundleChanged(************BundleEvent) line: 153
>>>>>>>>>>>>> EventDispatcher.************invokeBundleListenerCallback(***
>>>>>>>>>>>>> ****
>>>>>>>>>>>>>
>>>>>>>>>>>>> *****Bundle,
>>>>>>>>>>>>> EventListener,
>>>>>>>>>>>>> EventObject) line: 868
>>>>>>>>>>>>> EventDispatcher.************fireEventImmediately(********
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> EventDispatcher,
>>>>>>>>>>>>>
>>>>>>>>>>>>> int, Map,
>>>>>>>>>>>>> EventObject, Dictionary) line: 789
>>>>>>>>>>>>> EventDispatcher.************fireBundleEvent(BundleEvent,
>>>>>>>>>>>>> Framework)
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> line:
>>>>>>>>>>>>>
>>>>>>>>>>>>> 514
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Felix.fireBundleEvent(int, Bundle) line: 4244
>>>>>>>>>>>>> Felix.stopBundle(BundleImpl, boolean) line: 2351
>>>>>>>>>>>>> Felix$RefreshHelper.stop() line: 4629
>>>>>>>>>>>>> Felix.refreshPackages(************Collection,
>>>>>>>>>>>>> FrameworkListener[])
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> line:
>>>>>>>>>>>>>
>>>>>>>>>>>>> 3951
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> FrameworkWiringImpl.run() line: 172
>>>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>


Re: IPOJO initialization + refresh deadlock

Posted by Jad Naous <ja...@nerati.com>.
On Tue, Jan 1, 2013 at 8:30 AM, Richard S. Hall <he...@ungoverned.org>wrote:

> On 1/1/13 11:13, Jad Naous wrote:
>
>> On Tue, Jan 1, 2013 at 7:58 AM, Richard S. Hall <heavy@ungoverned.org
>> >wrote:
>>
>>  On 1/1/13 10:37, Jad Naous wrote:
>>>
>>>  On Tue, Jan 1, 2013 at 6:21 AM, Richard S. Hall<he...@ungoverned.org>**
>>>>
>>>> wrote:
>>>>
>>>>   On 1/1/13 06:09, Jad Naous wrote:
>>>>
>>>>>   Happy new year!
>>>>>
>>>>>> I'm running into another deadlock now. It seems like there needs to
>>>>>> be a
>>>>>> more rigorous study of how locking is used in the framework. In
>>>>>> particular,
>>>>>> it seems like the framework should not be invoking any listeners
>>>>>> within
>>>>>> the
>>>>>> same thread that's executing the stopping/starting/refreshing of
>>>>>> bundles...
>>>>>> Anywhere that happens there will be a potential for a deadlock because
>>>>>> of
>>>>>> a
>>>>>> misordering of lock acquisition. The framework should never call into
>>>>>> user
>>>>>> code with any locks held.
>>>>>>
>>>>>>   Yeah, tell me about it, but it is not possible in all cases,
>>>>>>
>>>>> unfortunately. I personally feel that all events should be
>>>>> asynchronous,
>>>>> but that's another story.
>>>>>
>>>>> -> richard
>>>>>
>>>>>
>>>>>   I'm happy to help fix this, but I need some pointers as to what
>>>>> needs to
>>>>>
>>>> happen. For synchronous events, what are the requirements? Or is this
>>>> not
>>>> fixable? Can the lock be released before firing the events?
>>>>
>>>>  I don't think it can be fixed, some of these things are baked into the
>>> spec. I think the spec even states somewhere that synchronous event
>>> listeners must be careful since they may be holding framework locks, so
>>> they shouldn't try to do too much. Of course, that is not easy advice to
>>> follow since framework impls vary.
>>>
>>> We even have bugs open that say we aren't holding locks when we should
>>> be,
>>> e.g.:
>>>
>>>      https://issues.apache.org/****jira/browse/FELIX-3806<https://issues.apache.org/**jira/browse/FELIX-3806>
>>> <https:/**/issues.apache.org/jira/**browse/FELIX-3806<https://issues.apache.org/jira/browse/FELIX-3806>
>>> >
>>>
>>>
>>> This is one of the poorly designed parts of the OSGi spec. It was meant
>>> to
>>> work in a world were services can "come and go at anytime", but it allows
>>> users to clings to synchronous events to do tons of work.
>>>
>>>  Then I guess this is something that ipojo is doing incorrectly?
>>
>
> Hard for me to say, but if there is a case where we can fire events
> without holding locks, then you are correct in saying that we should try to
> avoid doing so. Likewise, users should avoid doing too much when they
> receive synchronous events.
>

Well, iPOJO is not doing anything. It is just loading a class, and that's
what's causing the global lock to be acquired.


> -> richard
>
>
>>
>>  -> richard
>>>
>>>
>>>    Name: Thread-2
>>>>
>>>>> State: WAITING on [Ljava.lang.Object;@4a018e1b
>>>>>> Total blocked: 38,871,649  Total waited: 38,871,650
>>>>>>
>>>>>> Stack trace:
>>>>>>     java.lang.Object.wait(Native Method)
>>>>>> java.lang.Object.wait(Object.******java:485)
>>>>>> org.apache.felix.framework.******Felix.acquireGlobalLock(**Felix.**
>>>>>> **java:5033)
>>>>>> org.apache.felix.framework.******StatefulResolver.resolve(**
>>>>>> StatefulResolver.java:451)
>>>>>> org.apache.felix.framework.******BundleWiringImpl.****
>>>>>> searchDynamicImports(**
>>>>>> BundleWiringImpl.java:1578)
>>>>>> org.apache.felix.framework.******BundleWiringImpl.**
>>>>>> findClassOrResourceByDelegatio******n(BundleWiringImpl.java:****1478)
>>>>>> org.apache.felix.framework.******BundleWiringImpl.access$400(****
>>>>>> BundleWiringImpl.java:75)
>>>>>> org.apache.felix.framework.******BundleWiringImpl$**
>>>>>> BundleClassLoader.loadClass(******BundleWiringImpl.java:1882)
>>>>>> java.lang.ClassLoader.******loadClass(ClassLoader.java:******247)
>>>>>> org.apache.felix.framework.******BundleWiringImpl.****
>>>>>> getClassByDelegation(**
>>>>>> BundleWiringImpl.java:1356)
>>>>>> org.apache.felix.framework.******ServiceRegistrationImpl$**
>>>>>> ServiceReferenceImpl.******isAssignableTo(****
>>>>>> ServiceRegistrationImpl.java:******
>>>>>> 548)
>>>>>> org.apache.felix.framework.******util.Util.**isServiceAssignable(****
>>>>>> Util.java:280)
>>>>>> org.apache.felix.framework.******util.EventDispatcher.**
>>>>>> invokeServiceListenerCallback(******EventDispatcher.java:916)
>>>>>> org.apache.felix.framework.******util.EventDispatcher.****
>>>>>> fireEventImmediately(
>>>>>> **EventDispatcher.java:793)
>>>>>> org.apache.felix.framework.******util.EventDispatcher.****
>>>>>> fireServiceEvent(**
>>>>>> EventDispatcher.java:543)
>>>>>> org.apache.felix.framework.******Felix.fireServiceEvent(Felix.*****
>>>>>> *java:4346)
>>>>>> org.apache.felix.framework.******Felix.registerService(Felix.******
>>>>>> java:3356)
>>>>>> org.apache.felix.framework.******BundleContextImpl.******
>>>>>> registerService(**
>>>>>> BundleContextImpl.java:346)
>>>>>> org.apache.felix.ipojo.******IPojoFactory.start(****
>>>>>> IPojoFactory.java:613)
>>>>>>       - locked org.apache.felix.ipojo.******ComponentFactory@468034b6
>>>>>> org.apache.felix.ipojo.******Extender.******createAbstractFactory(**
>>>>>> Extender.java:520)
>>>>>> org.apache.felix.ipojo.******Extender.parse(Extender.java:******301)
>>>>>> org.apache.felix.ipojo.******Extender.startManagementFor(******
>>>>>> Extender.java:237)
>>>>>> org.apache.felix.ipojo.******Extender.access$600(Extender.***
>>>>>> ***java:52)
>>>>>> org.apache.felix.ipojo.******Extender$CreatorThread.run(******
>>>>>> Extender.java:769)
>>>>>> java.lang.Thread.run(Thread.******java:662)
>>>>>>
>>>>>> Name: FelixFrameworkWiring
>>>>>> State: BLOCKED on org.apache.felix.ipojo.****
>>>>>>
>>>>>> ComponentFactory@468034b6owned
>>>>>>
>>>>>> by: Thread-2
>>>>>> Total blocked: 7  Total waited: 1
>>>>>>
>>>>>> Stack trace:
>>>>>>     org.apache.felix.ipojo.******IPojoFactory.****
>>>>>> removeFactoryStateListener(**
>>>>>> IPojoFactory.java:511)
>>>>>> org.apache.felix.ipojo.******InstanceCreator.removeFactory(******
>>>>>> InstanceCreator.java:199)
>>>>>> org.apache.felix.ipojo.******Extender.closeManagementFor(******
>>>>>> Extender.java:180)
>>>>>> org.apache.felix.ipojo.******Extender.bundleChanged(****
>>>>>> Extender.java:153)
>>>>>> org.apache.felix.framework.******util.EventDispatcher.**
>>>>>> invokeBundleListenerCallback(******EventDispatcher.java:868)
>>>>>> org.apache.felix.framework.******util.EventDispatcher.****
>>>>>> fireEventImmediately(
>>>>>> **EventDispatcher.java:789)
>>>>>> org.apache.felix.framework.******util.EventDispatcher.****
>>>>>> fireBundleEvent(**
>>>>>> EventDispatcher.java:514)
>>>>>> org.apache.felix.framework.******Felix.fireBundleEvent(Felix.******
>>>>>> java:4330)
>>>>>> org.apache.felix.framework.******Felix.stopBundle(Felix.java:***
>>>>>> ***2451)
>>>>>> org.apache.felix.framework.******Felix$RefreshHelper.stop(****
>>>>>> Felix.java:4715)
>>>>>> org.apache.felix.framework.******Felix.refreshPackages(Felix.******
>>>>>> java:4037)
>>>>>> org.apache.felix.framework.******FrameworkWiringImpl.run(**
>>>>>> FrameworkWiringImpl.java:178)
>>>>>> java.lang.Thread.run(Thread.******java:662)
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Sat, Dec 22, 2012 at 6:39 PM, Richard S. Hall <
>>>>>> heavy@ungoverned.org
>>>>>>
>>>>>>  wrote:
>>>>>>>
>>>>>>>     On 12/22/12 20:41 , Jad Naous wrote:
>>>>>>
>>>>>>     Thanks! I was building with java6. Don't know if that is the
>>>>>>> issue.
>>>>>>>
>>>>>>>  Anyway,
>>>>>>>> I tested the snapshot, and looks like that fixes it.
>>>>>>>>
>>>>>>>> Any idea when 4.1.0 will be released? Do you know if
>>>>>>>> http://svn.apache.org/viewvc?********view=revision&revision=****
>>>>>>>> **1421958<http://svn.apache.org/viewvc?******view=revision&revision=****1421958>
>>>>>>>> <http://svn.apache.**org/viewvc?****view=revision&**
>>>>>>>> revision=**1421958<http://svn.apache.org/viewvc?****view=revision&revision=**1421958>
>>>>>>>> >
>>>>>>>> <http://svn.apache.org/****viewvc?**view=revision&****
>>>>>>>> revision=1421958<http://svn.apache.org/**viewvc?**view=revision&**revision=1421958>
>>>>>>>> <http://svn.**apache.org/viewvc?**view=**revision&revision=1421958<http://svn.apache.org/viewvc?**view=revision&revision=1421958>
>>>>>>>> >
>>>>>>>> <http://svn.apache.org/******viewvc?view=revision&revision=**
>>>>>>>> ****1421958<http://svn.apache.org/****viewvc?view=revision&revision=****1421958>
>>>>>>>> <http://svn.apache.**org/**viewvc?view=revision&**
>>>>>>>> revision=**1421958<http://svn.apache.org/**viewvc?view=revision&revision=**1421958>
>>>>>>>> >
>>>>>>>> <http://svn.apache.**org/**viewvc?view=revision&****
>>>>>>>> revision=1421958<http://svn.**apache.org/viewvc?view=**
>>>>>>>> revision&revision=1421958<http://svn.apache.org/viewvc?view=revision&revision=1421958>
>>>>>>>> >
>>>>>>>>
>>>>>>>>  will
>>>>>>>>>>
>>>>>>>>> apply
>>>>>>>>
>>>>>>>> cleanly onto 4.0.3? Otherwise, how stable do you think is
>>>>>>>> 4.1.0-SNAPSHOT?
>>>>>>>>
>>>>>>>>    The release version will be 4.2.0, but the 4.1.0-SNAPSHOT build
>>>>>>>> should
>>>>>>>>
>>>>>>>>  be
>>>>>>> reasonably stable. We try to keep trunk stable.
>>>>>>>
>>>>>>> I want to try to get a release out soon, but I don't have a specific
>>>>>>> time
>>>>>>> table. I'll try to get in done in January if all goes well.
>>>>>>>
>>>>>>> -> richard
>>>>>>>
>>>>>>>
>>>>>>>    Thanks!
>>>>>>>
>>>>>>>  Jad.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Fri, Dec 21, 2012 at 6:49 AM, Richard S. Hall <
>>>>>>>> heavy@ungoverned.org
>>>>>>>>
>>>>>>>>   wrote:
>>>>>>>>
>>>>>>>>>      It built fine for me. I'm was building with Java 7.
>>>>>>>>>
>>>>>>>>   Regardless, I deployed snapshots of framework, main, and
>>>>>>>>
>>>>>>>>> main.distribution, so just grab what you want from the Apache
>>>>>>>>> snapshot
>>>>>>>>> repo
>>>>>>>>> to try it out.
>>>>>>>>>
>>>>>>>>> -> richard
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 12/20/12 18:56 , Jad Naous wrote:
>>>>>>>>>
>>>>>>>>>     It does look like the same issue.
>>>>>>>>>
>>>>>>>>>   Got the trunk/framework. mvn clean install gives:
>>>>>>>>>
>>>>>>>>>> [INFO] --- maven-compiler-plugin:2.3.2:**********compile
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> (default-compile) @
>>>>>>>>>> org.apache.felix.framework ---
>>>>>>>>>> Dec 20, 2012 3:54:59 PM org.sonatype.guice.bean.****
>>>>>>>>>> reflect.Logs$JULSink
>>>>>>>>>> warn
>>>>>>>>>> WARNING: Error injecting: org.apache.maven.plugin.**********
>>>>>>>>>> CompilerMojo
>>>>>>>>>> java.lang.**********NoClassDefFoundError:
>>>>>>>>>> org/codehaus/plexus/compiler/**********util/scan/******
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> InclusionScanException
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> jad.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Thu, Dec 20, 2012 at 3:22 PM, Richard S. Hall <
>>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>>
>>>>>>>>>>    wrote:
>>>>>>>>>>
>>>>>>>>>>        On 12/20/12 4:10 PM, Jad Naous wrote:
>>>>>>>>>>>
>>>>>>>>>>>        If a bundle undergoes a refresh while ipojo is still
>>>>>>>>>> initializing
>>>>>>>>>>
>>>>>>>>>>     components, a deadlock can happen.  The issue is that if
>>>>>>>>>>> ipojo is
>>>>>>>>>>>
>>>>>>>>>>>  attempting to register a service, it will be doing it while
>>>>>>>>>>>> synchronizing
>>>>>>>>>>>> on the InstanceCreator instance. It will then try to register a
>>>>>>>>>>>> service
>>>>>>>>>>>> which requires the framework's global lock.
>>>>>>>>>>>>
>>>>>>>>>>>>      Registering a service doesn't require a global, just a
>>>>>>>>>>>> bundle
>>>>>>>>>>>> lock.
>>>>>>>>>>>> I
>>>>>>>>>>>>
>>>>>>>>>>>>    think this could be related to:
>>>>>>>>>>>>
>>>>>>>>>>>>           https://issues.apache.org/******
>>>>>>>>>>> ******jira/browse/FELIX-3761<https://issues.apache.org/**********jira/browse/FELIX-3761>
>>>>>>>>>>> <h**ttps://issues.apache.org/**********jira/browse/FELIX-3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>> >
>>>>>>>>>>> <htt**ps://issues.apache.org/**********jira/browse/FELIX-3761<http://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>>> <**https://issues.apache.org/********jira/browse/FELIX-3761<https://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>> >
>>>>>>>>>>> <https**://issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>> >
>>>>>>>>>>> <ht**tps://issues.apache.org/********jira/browse/FELIX-3761<http://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>>> <ht**tps://issues.apache.org/******jira/browse/FELIX-3761<https://issues.apache.org/****jira/browse/FELIX-3761>
>>>>>>>>>>> >
>>>>>>>>>>> <https:/**/issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>> >
>>>>>>>>>>> <ht**tp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>> >
>>>>>>>>>>> <http**s://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>> >
>>>>>>>>>>> <http**s://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>> <http**s://issues.apache.org/**jira/**browse/FELIX-3761<https://issues.apache.org/**jira/browse/FELIX-3761>
>>>>>>>>>>> >
>>>>>>>>>>> <https:/**/issues.apache.org/********jira/**browse/FELIX-3761<http://issues.apache.org/******jira/**browse/FELIX-3761>
>>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>> >
>>>>>>>>>>> <ht**tp://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>> >
>>>>>>>>>>> <http**://issues.apache.org/****jira/****browse/FELIX-3761<http://issues.apache.org/**jira/****browse/FELIX-3761>
>>>>>>>>>>> <htt**p://issues.apache.org/jira/******browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>> >
>>>>>>>>>>> <htt**p://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>> >
>>>>>>>>>>> <https**://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>> >
>>>>>>>>>>>
>>>>>>>>>>> <http**://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>> >
>>>>>>>>>>> <https**://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>>> <http**://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>> >
>>>>>>>>>>> <https**://issues.apache.org/**jira/**browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3761<https://issues.apache.org/jira/browse/FELIX-3761>
>>>>>>>>>>> >
>>>>>>>>>>> This avoid grabbing the bundle lock when registering a service,
>>>>>>>>>>> so
>>>>>>>>>>> maybe
>>>>>>>>>>> it will help your situation. You could try to build the framework
>>>>>>>>>>> from
>>>>>>>>>>> trunk and see if it makes a difference.
>>>>>>>>>>>
>>>>>>>>>>> If you aren't able to build from trunk, let me know and I'll try
>>>>>>>>>>> to
>>>>>>>>>>> publish a snapshot build since I don't think we have a recent one
>>>>>>>>>>> (we
>>>>>>>>>>> should do this no matter what).
>>>>>>>>>>>
>>>>>>>>>>> -> richard
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>      If a refresh is happening in another thread, the refresh
>>>>>>>>>>> will
>>>>>>>>>>> be
>>>>>>>>>>> holding
>>>>>>>>>>>
>>>>>>>>>>>    the framework's global lock, which will then call IPOJO's
>>>>>>>>>>> extender,
>>>>>>>>>>>
>>>>>>>>>>>  which
>>>>>>>>>>>> then attempts to call a method on InstanceCreator, hence leading
>>>>>>>>>>>> to
>>>>>>>>>>>> the
>>>>>>>>>>>> deadlock.
>>>>>>>>>>>>
>>>>>>>>>>>> Here are the stack traces:
>>>>>>>>>>>>
>>>>>>>>>>>> Daemon Thread [Thread-1] (Suspended)
>>>>>>>>>>>> Object.wait(long) line: not available [native method]
>>>>>>>>>>>> Object[](Object).wait() line: 485
>>>>>>>>>>>> Felix.acquireBundleLock(************BundleImpl, int) line: 4871
>>>>>>>>>>>> Felix.registerService(************BundleImpl, String[], Object,
>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>> line:
>>>>>>>>>>>> 3205
>>>>>>>>>>>> BundleContextImpl.************registerService(String[], Object,
>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>> line:
>>>>>>>>>>>> 346
>>>>>>>>>>>>
>>>>>>>>>>>> IPojoContext.registerService(************String[], Object,
>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>> line:
>>>>>>>>>>>> 385
>>>>>>>>>>>> ProvidedService.************registerService() line: 362
>>>>>>>>>>>> ProvidedServiceHandler.__M_************stateChanged(int) line:
>>>>>>>>>>>> 509
>>>>>>>>>>>> ProvidedServiceHandler.************stateChanged(int) line: not
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> available
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> InstanceManager.setState(int) line: 536
>>>>>>>>>>>> InstanceManager.start() line: 418
>>>>>>>>>>>> ComponentFactory.************createInstance(Dictionary,
>>>>>>>>>>>>
>>>>>>>>>>>> IPojoContext,
>>>>>>>>>>>> HandlerManager[])
>>>>>>>>>>>> line: 179
>>>>>>>>>>>>
>>>>>>>>>>>> ComponentFactory(IPojoFactory)************.**
>>>>>>>>>>>>
>>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>>> Dictionary,
>>>>>>>>>>>> ServiceContext) line: 310
>>>>>>>>>>>> ComponentFactory(IPojoFactory)************.**
>>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>>> Dictionary)
>>>>>>>>>>>> line: 239
>>>>>>>>>>>> InstanceCreator$************ManagedInstance.create(************
>>>>>>>>>>>> IPojoFactory)
>>>>>>>>>>>> line: 355
>>>>>>>>>>>> InstanceCreator.addInstance(************Dictionary, long)
>>>>>>>>>>>> line: 89
>>>>>>>>>>>> Extender.parse(Bundle, String) line: 306
>>>>>>>>>>>> Extender.startManagementFor(************Bundle) line: 237
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Extender.access$600(Extender, Bundle) line: 52
>>>>>>>>>>>> Extender$CreatorThread.run() line: 769
>>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>>
>>>>>>>>>>>> Daemon Thread [FelixFrameworkWiring] (Suspended)
>>>>>>>>>>>> InstanceCreator.************removeInstancesFromBundle(********
>>>>>>>>>>>> ****long)
>>>>>>>>>>>> line: 116
>>>>>>>>>>>> Extender.closeManagementFor(************Bundle) line: 171
>>>>>>>>>>>> Extender.bundleChanged(************BundleEvent) line: 153
>>>>>>>>>>>> EventDispatcher.************invokeBundleListenerCallback(***
>>>>>>>>>>>> ****
>>>>>>>>>>>>
>>>>>>>>>>>> *****Bundle,
>>>>>>>>>>>> EventListener,
>>>>>>>>>>>> EventObject) line: 868
>>>>>>>>>>>> EventDispatcher.************fireEventImmediately(********
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> EventDispatcher,
>>>>>>>>>>>>
>>>>>>>>>>>> int, Map,
>>>>>>>>>>>> EventObject, Dictionary) line: 789
>>>>>>>>>>>> EventDispatcher.************fireBundleEvent(BundleEvent,
>>>>>>>>>>>> Framework)
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> line:
>>>>>>>>>>>>
>>>>>>>>>>>> 514
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Felix.fireBundleEvent(int, Bundle) line: 4244
>>>>>>>>>>>> Felix.stopBundle(BundleImpl, boolean) line: 2351
>>>>>>>>>>>> Felix$RefreshHelper.stop() line: 4629
>>>>>>>>>>>> Felix.refreshPackages(************Collection,
>>>>>>>>>>>> FrameworkListener[])
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> line:
>>>>>>>>>>>>
>>>>>>>>>>>> 3951
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> FrameworkWiringImpl.run() line: 172
>>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>

Re: IPOJO initialization + refresh deadlock

Posted by "Richard S. Hall" <he...@ungoverned.org>.
On 1/1/13 11:13, Jad Naous wrote:
> On Tue, Jan 1, 2013 at 7:58 AM, Richard S. Hall <he...@ungoverned.org>wrote:
>
>> On 1/1/13 10:37, Jad Naous wrote:
>>
>>> On Tue, Jan 1, 2013 at 6:21 AM, Richard S. Hall<he...@ungoverned.org>**
>>> wrote:
>>>
>>>   On 1/1/13 06:09, Jad Naous wrote:
>>>>   Happy new year!
>>>>> I'm running into another deadlock now. It seems like there needs to be a
>>>>> more rigorous study of how locking is used in the framework. In
>>>>> particular,
>>>>> it seems like the framework should not be invoking any listeners within
>>>>> the
>>>>> same thread that's executing the stopping/starting/refreshing of
>>>>> bundles...
>>>>> Anywhere that happens there will be a potential for a deadlock because
>>>>> of
>>>>> a
>>>>> misordering of lock acquisition. The framework should never call into
>>>>> user
>>>>> code with any locks held.
>>>>>
>>>>>   Yeah, tell me about it, but it is not possible in all cases,
>>>> unfortunately. I personally feel that all events should be asynchronous,
>>>> but that's another story.
>>>>
>>>> -> richard
>>>>
>>>>
>>>>   I'm happy to help fix this, but I need some pointers as to what needs to
>>> happen. For synchronous events, what are the requirements? Or is this not
>>> fixable? Can the lock be released before firing the events?
>>>
>> I don't think it can be fixed, some of these things are baked into the
>> spec. I think the spec even states somewhere that synchronous event
>> listeners must be careful since they may be holding framework locks, so
>> they shouldn't try to do too much. Of course, that is not easy advice to
>> follow since framework impls vary.
>>
>> We even have bugs open that say we aren't holding locks when we should be,
>> e.g.:
>>
>>      https://issues.apache.org/**jira/browse/FELIX-3806<https://issues.apache.org/jira/browse/FELIX-3806>
>>
>> This is one of the poorly designed parts of the OSGi spec. It was meant to
>> work in a world were services can "come and go at anytime", but it allows
>> users to clings to synchronous events to do tons of work.
>>
> Then I guess this is something that ipojo is doing incorrectly?

Hard for me to say, but if there is a case where we can fire events 
without holding locks, then you are correct in saying that we should try 
to avoid doing so. Likewise, users should avoid doing too much when they 
receive synchronous events.

-> richard

>
>
>> -> richard
>>
>>
>>>   Name: Thread-2
>>>>> State: WAITING on [Ljava.lang.Object;@4a018e1b
>>>>> Total blocked: 38,871,649  Total waited: 38,871,650
>>>>>
>>>>> Stack trace:
>>>>>     java.lang.Object.wait(Native Method)
>>>>> java.lang.Object.wait(Object.****java:485)
>>>>> org.apache.felix.framework.****Felix.acquireGlobalLock(Felix.**
>>>>> **java:5033)
>>>>> org.apache.felix.framework.****StatefulResolver.resolve(**
>>>>> StatefulResolver.java:451)
>>>>> org.apache.felix.framework.****BundleWiringImpl.****
>>>>> searchDynamicImports(**
>>>>> BundleWiringImpl.java:1578)
>>>>> org.apache.felix.framework.****BundleWiringImpl.**
>>>>> findClassOrResourceByDelegatio****n(BundleWiringImpl.java:**1478)
>>>>> org.apache.felix.framework.****BundleWiringImpl.access$400(**
>>>>> BundleWiringImpl.java:75)
>>>>> org.apache.felix.framework.****BundleWiringImpl$**
>>>>> BundleClassLoader.loadClass(****BundleWiringImpl.java:1882)
>>>>> java.lang.ClassLoader.****loadClass(ClassLoader.java:****247)
>>>>> org.apache.felix.framework.****BundleWiringImpl.****
>>>>> getClassByDelegation(**
>>>>> BundleWiringImpl.java:1356)
>>>>> org.apache.felix.framework.****ServiceRegistrationImpl$**
>>>>> ServiceReferenceImpl.****isAssignableTo(****
>>>>> ServiceRegistrationImpl.java:****
>>>>> 548)
>>>>> org.apache.felix.framework.****util.Util.isServiceAssignable(****
>>>>> Util.java:280)
>>>>> org.apache.felix.framework.****util.EventDispatcher.**
>>>>> invokeServiceListenerCallback(****EventDispatcher.java:916)
>>>>> org.apache.felix.framework.****util.EventDispatcher.****
>>>>> fireEventImmediately(
>>>>> **EventDispatcher.java:793)
>>>>> org.apache.felix.framework.****util.EventDispatcher.****
>>>>> fireServiceEvent(**
>>>>> EventDispatcher.java:543)
>>>>> org.apache.felix.framework.****Felix.fireServiceEvent(Felix.***
>>>>> *java:4346)
>>>>> org.apache.felix.framework.****Felix.registerService(Felix.****
>>>>> java:3356)
>>>>> org.apache.felix.framework.****BundleContextImpl.****registerService(**
>>>>> BundleContextImpl.java:346)
>>>>> org.apache.felix.ipojo.****IPojoFactory.start(****
>>>>> IPojoFactory.java:613)
>>>>>       - locked org.apache.felix.ipojo.****ComponentFactory@468034b6
>>>>> org.apache.felix.ipojo.****Extender.****createAbstractFactory(**
>>>>> Extender.java:520)
>>>>> org.apache.felix.ipojo.****Extender.parse(Extender.java:****301)
>>>>> org.apache.felix.ipojo.****Extender.startManagementFor(****
>>>>> Extender.java:237)
>>>>> org.apache.felix.ipojo.****Extender.access$600(Extender.****java:52)
>>>>> org.apache.felix.ipojo.****Extender$CreatorThread.run(****
>>>>> Extender.java:769)
>>>>> java.lang.Thread.run(Thread.****java:662)
>>>>>
>>>>> Name: FelixFrameworkWiring
>>>>> State: BLOCKED on org.apache.felix.ipojo.****
>>>>> ComponentFactory@468034b6owned
>>>>>
>>>>> by: Thread-2
>>>>> Total blocked: 7  Total waited: 1
>>>>>
>>>>> Stack trace:
>>>>>     org.apache.felix.ipojo.****IPojoFactory.****
>>>>> removeFactoryStateListener(**
>>>>> IPojoFactory.java:511)
>>>>> org.apache.felix.ipojo.****InstanceCreator.removeFactory(****
>>>>> InstanceCreator.java:199)
>>>>> org.apache.felix.ipojo.****Extender.closeManagementFor(****
>>>>> Extender.java:180)
>>>>> org.apache.felix.ipojo.****Extender.bundleChanged(****
>>>>> Extender.java:153)
>>>>> org.apache.felix.framework.****util.EventDispatcher.**
>>>>> invokeBundleListenerCallback(****EventDispatcher.java:868)
>>>>> org.apache.felix.framework.****util.EventDispatcher.****
>>>>> fireEventImmediately(
>>>>> **EventDispatcher.java:789)
>>>>> org.apache.felix.framework.****util.EventDispatcher.****
>>>>> fireBundleEvent(**
>>>>> EventDispatcher.java:514)
>>>>> org.apache.felix.framework.****Felix.fireBundleEvent(Felix.****
>>>>> java:4330)
>>>>> org.apache.felix.framework.****Felix.stopBundle(Felix.java:****2451)
>>>>> org.apache.felix.framework.****Felix$RefreshHelper.stop(****
>>>>> Felix.java:4715)
>>>>> org.apache.felix.framework.****Felix.refreshPackages(Felix.****
>>>>> java:4037)
>>>>> org.apache.felix.framework.****FrameworkWiringImpl.run(**
>>>>> FrameworkWiringImpl.java:178)
>>>>> java.lang.Thread.run(Thread.****java:662)
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Sat, Dec 22, 2012 at 6:39 PM, Richard S. Hall <heavy@ungoverned.org
>>>>>
>>>>>> wrote:
>>>>>>
>>>>>    On 12/22/12 20:41 , Jad Naous wrote:
>>>>>
>>>>>>    Thanks! I was building with java6. Don't know if that is the issue.
>>>>>>
>>>>>>> Anyway,
>>>>>>> I tested the snapshot, and looks like that fixes it.
>>>>>>>
>>>>>>> Any idea when 4.1.0 will be released? Do you know if
>>>>>>> http://svn.apache.org/viewvc?******view=revision&revision=****1421958<http://svn.apache.org/viewvc?****view=revision&revision=**1421958>
>>>>>>> <http://svn.apache.org/**viewvc?**view=revision&**revision=1421958<http://svn.apache.org/viewvc?**view=revision&revision=1421958>
>>>>>>> <http://svn.apache.org/****viewvc?view=revision&revision=****1421958<http://svn.apache.org/**viewvc?view=revision&revision=**1421958>
>>>>>>> <http://svn.apache.**org/viewvc?view=revision&**revision=1421958<http://svn.apache.org/viewvc?view=revision&revision=1421958>
>>>>>>>>> will
>>>>>>> apply
>>>>>>>
>>>>>>> cleanly onto 4.0.3? Otherwise, how stable do you think is
>>>>>>> 4.1.0-SNAPSHOT?
>>>>>>>
>>>>>>>    The release version will be 4.2.0, but the 4.1.0-SNAPSHOT build
>>>>>>> should
>>>>>>>
>>>>>> be
>>>>>> reasonably stable. We try to keep trunk stable.
>>>>>>
>>>>>> I want to try to get a release out soon, but I don't have a specific
>>>>>> time
>>>>>> table. I'll try to get in done in January if all goes well.
>>>>>>
>>>>>> -> richard
>>>>>>
>>>>>>
>>>>>>    Thanks!
>>>>>>
>>>>>>> Jad.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Dec 21, 2012 at 6:49 AM, Richard S. Hall <
>>>>>>> heavy@ungoverned.org
>>>>>>>
>>>>>>>   wrote:
>>>>>>>>      It built fine for me. I'm was building with Java 7.
>>>>>>>   Regardless, I deployed snapshots of framework, main, and
>>>>>>>> main.distribution, so just grab what you want from the Apache
>>>>>>>> snapshot
>>>>>>>> repo
>>>>>>>> to try it out.
>>>>>>>>
>>>>>>>> -> richard
>>>>>>>>
>>>>>>>>
>>>>>>>> On 12/20/12 18:56 , Jad Naous wrote:
>>>>>>>>
>>>>>>>>     It does look like the same issue.
>>>>>>>>
>>>>>>>>   Got the trunk/framework. mvn clean install gives:
>>>>>>>>> [INFO] --- maven-compiler-plugin:2.3.2:********compile
>>>>>>>>>
>>>>>>>>> (default-compile) @
>>>>>>>>> org.apache.felix.framework ---
>>>>>>>>> Dec 20, 2012 3:54:59 PM org.sonatype.guice.bean.****
>>>>>>>>> reflect.Logs$JULSink
>>>>>>>>> warn
>>>>>>>>> WARNING: Error injecting: org.apache.maven.plugin.********
>>>>>>>>> CompilerMojo
>>>>>>>>> java.lang.********NoClassDefFoundError:
>>>>>>>>> org/codehaus/plexus/compiler/********util/scan/******
>>>>>>>>>
>>>>>>>>> InclusionScanException
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> jad.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, Dec 20, 2012 at 3:22 PM, Richard S. Hall <
>>>>>>>>> heavy@ungoverned.org
>>>>>>>>>
>>>>>>>>>    wrote:
>>>>>>>>>
>>>>>>>>>>       On 12/20/12 4:10 PM, Jad Naous wrote:
>>>>>>>>>>
>>>>>>>>>       If a bundle undergoes a refresh while ipojo is still
>>>>>>>>> initializing
>>>>>>>>>
>>>>>>>>>>    components, a deadlock can happen.  The issue is that if ipojo is
>>>>>>>>>>
>>>>>>>>>>> attempting to register a service, it will be doing it while
>>>>>>>>>>> synchronizing
>>>>>>>>>>> on the InstanceCreator instance. It will then try to register a
>>>>>>>>>>> service
>>>>>>>>>>> which requires the framework's global lock.
>>>>>>>>>>>
>>>>>>>>>>>      Registering a service doesn't require a global, just a bundle
>>>>>>>>>>> lock.
>>>>>>>>>>> I
>>>>>>>>>>>
>>>>>>>>>>>    think this could be related to:
>>>>>>>>>>>
>>>>>>>>>>          https://issues.apache.org/**********jira/browse/FELIX-3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>>> <htt**ps://issues.apache.org/********jira/browse/FELIX-3761<https://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>>> <https**://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>> <ht**tps://issues.apache.org/******jira/browse/FELIX-3761<https://issues.apache.org/****jira/browse/FELIX-3761>
>>>>>>>>>> <https:/**/issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>> <http**s://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>> <http**s://issues.apache.org/**jira/**browse/FELIX-3761<https://issues.apache.org/**jira/browse/FELIX-3761>
>>>>>>>>>> <https:/**/issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>> <http**://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>> <https**://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>>> <http**://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>> <https**://issues.apache.org/**jira/**browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3761<https://issues.apache.org/jira/browse/FELIX-3761>
>>>>>>>>>> This avoid grabbing the bundle lock when registering a service, so
>>>>>>>>>> maybe
>>>>>>>>>> it will help your situation. You could try to build the framework
>>>>>>>>>> from
>>>>>>>>>> trunk and see if it makes a difference.
>>>>>>>>>>
>>>>>>>>>> If you aren't able to build from trunk, let me know and I'll try to
>>>>>>>>>> publish a snapshot build since I don't think we have a recent one
>>>>>>>>>> (we
>>>>>>>>>> should do this no matter what).
>>>>>>>>>>
>>>>>>>>>> -> richard
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>      If a refresh is happening in another thread, the refresh will
>>>>>>>>>> be
>>>>>>>>>> holding
>>>>>>>>>>
>>>>>>>>>>    the framework's global lock, which will then call IPOJO's
>>>>>>>>>> extender,
>>>>>>>>>>
>>>>>>>>>>> which
>>>>>>>>>>> then attempts to call a method on InstanceCreator, hence leading
>>>>>>>>>>> to
>>>>>>>>>>> the
>>>>>>>>>>> deadlock.
>>>>>>>>>>>
>>>>>>>>>>> Here are the stack traces:
>>>>>>>>>>>
>>>>>>>>>>> Daemon Thread [Thread-1] (Suspended)
>>>>>>>>>>> Object.wait(long) line: not available [native method]
>>>>>>>>>>> Object[](Object).wait() line: 485
>>>>>>>>>>> Felix.acquireBundleLock(**********BundleImpl, int) line: 4871
>>>>>>>>>>> Felix.registerService(**********BundleImpl, String[], Object,
>>>>>>>>>>> Dictionary)
>>>>>>>>>>> line:
>>>>>>>>>>> 3205
>>>>>>>>>>> BundleContextImpl.**********registerService(String[], Object,
>>>>>>>>>>> Dictionary)
>>>>>>>>>>> line:
>>>>>>>>>>> 346
>>>>>>>>>>>
>>>>>>>>>>> IPojoContext.registerService(**********String[], Object,
>>>>>>>>>>> Dictionary)
>>>>>>>>>>> line:
>>>>>>>>>>> 385
>>>>>>>>>>> ProvidedService.**********registerService() line: 362
>>>>>>>>>>> ProvidedServiceHandler.__M_**********stateChanged(int) line: 509
>>>>>>>>>>> ProvidedServiceHandler.**********stateChanged(int) line: not
>>>>>>>>>>>
>>>>>>>>>>> available
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> InstanceManager.setState(int) line: 536
>>>>>>>>>>> InstanceManager.start() line: 418
>>>>>>>>>>> ComponentFactory.**********createInstance(Dictionary,
>>>>>>>>>>> IPojoContext,
>>>>>>>>>>> HandlerManager[])
>>>>>>>>>>> line: 179
>>>>>>>>>>>
>>>>>>>>>>> ComponentFactory(IPojoFactory)**********.**
>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>> Dictionary,
>>>>>>>>>>> ServiceContext) line: 310
>>>>>>>>>>> ComponentFactory(IPojoFactory)**********.**
>>>>>>>>>>> createComponentInstance(******
>>>>>>>>>>> Dictionary)
>>>>>>>>>>> line: 239
>>>>>>>>>>> InstanceCreator$**********ManagedInstance.create(**********
>>>>>>>>>>> IPojoFactory)
>>>>>>>>>>> line: 355
>>>>>>>>>>> InstanceCreator.addInstance(**********Dictionary, long) line: 89
>>>>>>>>>>> Extender.parse(Bundle, String) line: 306
>>>>>>>>>>> Extender.startManagementFor(**********Bundle) line: 237
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Extender.access$600(Extender, Bundle) line: 52
>>>>>>>>>>> Extender$CreatorThread.run() line: 769
>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>
>>>>>>>>>>> Daemon Thread [FelixFrameworkWiring] (Suspended)
>>>>>>>>>>> InstanceCreator.**********removeInstancesFromBundle(******
>>>>>>>>>>> ****long)
>>>>>>>>>>> line: 116
>>>>>>>>>>> Extender.closeManagementFor(**********Bundle) line: 171
>>>>>>>>>>> Extender.bundleChanged(**********BundleEvent) line: 153
>>>>>>>>>>> EventDispatcher.**********invokeBundleListenerCallback(*****
>>>>>>>>>>> *****Bundle,
>>>>>>>>>>> EventListener,
>>>>>>>>>>> EventObject) line: 868
>>>>>>>>>>> EventDispatcher.**********fireEventImmediately(********
>>>>>>>>>>>
>>>>>>>>>>> EventDispatcher,
>>>>>>>>>>>
>>>>>>>>>>> int, Map,
>>>>>>>>>>> EventObject, Dictionary) line: 789
>>>>>>>>>>> EventDispatcher.**********fireBundleEvent(BundleEvent, Framework)
>>>>>>>>>>>
>>>>>>>>>>> line:
>>>>>>>>>>>
>>>>>>>>>>> 514
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Felix.fireBundleEvent(int, Bundle) line: 4244
>>>>>>>>>>> Felix.stopBundle(BundleImpl, boolean) line: 2351
>>>>>>>>>>> Felix$RefreshHelper.stop() line: 4629
>>>>>>>>>>> Felix.refreshPackages(**********Collection, FrameworkListener[])
>>>>>>>>>>>
>>>>>>>>>>> line:
>>>>>>>>>>>
>>>>>>>>>>> 3951
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> FrameworkWiringImpl.run() line: 172
>>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>


Re: IPOJO initialization + refresh deadlock

Posted by Jad Naous <ja...@nerati.com>.
On Tue, Jan 1, 2013 at 7:58 AM, Richard S. Hall <he...@ungoverned.org>wrote:

> On 1/1/13 10:37, Jad Naous wrote:
>
>> On Tue, Jan 1, 2013 at 6:21 AM, Richard S. Hall<he...@ungoverned.org>**
>> wrote:
>>
>>  On 1/1/13 06:09, Jad Naous wrote:
>>>
>>>  Happy new year!
>>>>
>>>> I'm running into another deadlock now. It seems like there needs to be a
>>>> more rigorous study of how locking is used in the framework. In
>>>> particular,
>>>> it seems like the framework should not be invoking any listeners within
>>>> the
>>>> same thread that's executing the stopping/starting/refreshing of
>>>> bundles...
>>>> Anywhere that happens there will be a potential for a deadlock because
>>>> of
>>>> a
>>>> misordering of lock acquisition. The framework should never call into
>>>> user
>>>> code with any locks held.
>>>>
>>>>  Yeah, tell me about it, but it is not possible in all cases,
>>> unfortunately. I personally feel that all events should be asynchronous,
>>> but that's another story.
>>>
>>> -> richard
>>>
>>>
>>>  I'm happy to help fix this, but I need some pointers as to what needs to
>> happen. For synchronous events, what are the requirements? Or is this not
>> fixable? Can the lock be released before firing the events?
>>
>
> I don't think it can be fixed, some of these things are baked into the
> spec. I think the spec even states somewhere that synchronous event
> listeners must be careful since they may be holding framework locks, so
> they shouldn't try to do too much. Of course, that is not easy advice to
> follow since framework impls vary.
>
> We even have bugs open that say we aren't holding locks when we should be,
> e.g.:
>
>     https://issues.apache.org/**jira/browse/FELIX-3806<https://issues.apache.org/jira/browse/FELIX-3806>
>
> This is one of the poorly designed parts of the OSGi spec. It was meant to
> work in a world were services can "come and go at anytime", but it allows
> users to clings to synchronous events to do tons of work.
>

Then I guess this is something that ipojo is doing incorrectly?


> -> richard
>
>
>>  Name: Thread-2
>>>> State: WAITING on [Ljava.lang.Object;@4a018e1b
>>>> Total blocked: 38,871,649  Total waited: 38,871,650
>>>>
>>>> Stack trace:
>>>>    java.lang.Object.wait(Native Method)
>>>> java.lang.Object.wait(Object.****java:485)
>>>> org.apache.felix.framework.****Felix.acquireGlobalLock(Felix.**
>>>> **java:5033)
>>>> org.apache.felix.framework.****StatefulResolver.resolve(**
>>>> StatefulResolver.java:451)
>>>> org.apache.felix.framework.****BundleWiringImpl.****
>>>> searchDynamicImports(**
>>>> BundleWiringImpl.java:1578)
>>>> org.apache.felix.framework.****BundleWiringImpl.**
>>>> findClassOrResourceByDelegatio****n(BundleWiringImpl.java:**1478)
>>>> org.apache.felix.framework.****BundleWiringImpl.access$400(**
>>>> BundleWiringImpl.java:75)
>>>> org.apache.felix.framework.****BundleWiringImpl$**
>>>> BundleClassLoader.loadClass(****BundleWiringImpl.java:1882)
>>>> java.lang.ClassLoader.****loadClass(ClassLoader.java:****247)
>>>> org.apache.felix.framework.****BundleWiringImpl.****
>>>> getClassByDelegation(**
>>>> BundleWiringImpl.java:1356)
>>>> org.apache.felix.framework.****ServiceRegistrationImpl$**
>>>> ServiceReferenceImpl.****isAssignableTo(****
>>>> ServiceRegistrationImpl.java:****
>>>> 548)
>>>> org.apache.felix.framework.****util.Util.isServiceAssignable(****
>>>> Util.java:280)
>>>> org.apache.felix.framework.****util.EventDispatcher.**
>>>> invokeServiceListenerCallback(****EventDispatcher.java:916)
>>>> org.apache.felix.framework.****util.EventDispatcher.****
>>>> fireEventImmediately(
>>>> **EventDispatcher.java:793)
>>>> org.apache.felix.framework.****util.EventDispatcher.****
>>>> fireServiceEvent(**
>>>> EventDispatcher.java:543)
>>>> org.apache.felix.framework.****Felix.fireServiceEvent(Felix.***
>>>> *java:4346)
>>>> org.apache.felix.framework.****Felix.registerService(Felix.****
>>>> java:3356)
>>>> org.apache.felix.framework.****BundleContextImpl.****registerService(**
>>>> BundleContextImpl.java:346)
>>>> org.apache.felix.ipojo.****IPojoFactory.start(****
>>>> IPojoFactory.java:613)
>>>>      - locked org.apache.felix.ipojo.****ComponentFactory@468034b6
>>>> org.apache.felix.ipojo.****Extender.****createAbstractFactory(**
>>>> Extender.java:520)
>>>> org.apache.felix.ipojo.****Extender.parse(Extender.java:****301)
>>>> org.apache.felix.ipojo.****Extender.startManagementFor(****
>>>> Extender.java:237)
>>>> org.apache.felix.ipojo.****Extender.access$600(Extender.****java:52)
>>>> org.apache.felix.ipojo.****Extender$CreatorThread.run(****
>>>> Extender.java:769)
>>>> java.lang.Thread.run(Thread.****java:662)
>>>>
>>>> Name: FelixFrameworkWiring
>>>> State: BLOCKED on org.apache.felix.ipojo.****
>>>> ComponentFactory@468034b6owned
>>>>
>>>> by: Thread-2
>>>> Total blocked: 7  Total waited: 1
>>>>
>>>> Stack trace:
>>>>    org.apache.felix.ipojo.****IPojoFactory.****
>>>> removeFactoryStateListener(**
>>>> IPojoFactory.java:511)
>>>> org.apache.felix.ipojo.****InstanceCreator.removeFactory(****
>>>> InstanceCreator.java:199)
>>>> org.apache.felix.ipojo.****Extender.closeManagementFor(****
>>>> Extender.java:180)
>>>> org.apache.felix.ipojo.****Extender.bundleChanged(****
>>>> Extender.java:153)
>>>> org.apache.felix.framework.****util.EventDispatcher.**
>>>> invokeBundleListenerCallback(****EventDispatcher.java:868)
>>>> org.apache.felix.framework.****util.EventDispatcher.****
>>>> fireEventImmediately(
>>>> **EventDispatcher.java:789)
>>>> org.apache.felix.framework.****util.EventDispatcher.****
>>>> fireBundleEvent(**
>>>> EventDispatcher.java:514)
>>>> org.apache.felix.framework.****Felix.fireBundleEvent(Felix.****
>>>> java:4330)
>>>> org.apache.felix.framework.****Felix.stopBundle(Felix.java:****2451)
>>>> org.apache.felix.framework.****Felix$RefreshHelper.stop(****
>>>> Felix.java:4715)
>>>> org.apache.felix.framework.****Felix.refreshPackages(Felix.****
>>>> java:4037)
>>>> org.apache.felix.framework.****FrameworkWiringImpl.run(**
>>>> FrameworkWiringImpl.java:178)
>>>> java.lang.Thread.run(Thread.****java:662)
>>>>
>>>>
>>>>
>>>>
>>>> On Sat, Dec 22, 2012 at 6:39 PM, Richard S. Hall <heavy@ungoverned.org
>>>>
>>>>> wrote:
>>>>>
>>>>   On 12/22/12 20:41 , Jad Naous wrote:
>>>>
>>>>>   Thanks! I was building with java6. Don't know if that is the issue.
>>>>>
>>>>>> Anyway,
>>>>>> I tested the snapshot, and looks like that fixes it.
>>>>>>
>>>>>> Any idea when 4.1.0 will be released? Do you know if
>>>>>> http://svn.apache.org/viewvc?******view=revision&revision=****1421958<http://svn.apache.org/viewvc?****view=revision&revision=**1421958>
>>>>>> <http://svn.apache.org/**viewvc?**view=revision&**revision=1421958<http://svn.apache.org/viewvc?**view=revision&revision=1421958>
>>>>>> >
>>>>>> <http://svn.apache.org/****viewvc?view=revision&revision=****1421958<http://svn.apache.org/**viewvc?view=revision&revision=**1421958>
>>>>>> <http://svn.apache.**org/viewvc?view=revision&**revision=1421958<http://svn.apache.org/viewvc?view=revision&revision=1421958>
>>>>>> >>will
>>>>>>
>>>>>> apply
>>>>>>
>>>>>> cleanly onto 4.0.3? Otherwise, how stable do you think is
>>>>>> 4.1.0-SNAPSHOT?
>>>>>>
>>>>>>   The release version will be 4.2.0, but the 4.1.0-SNAPSHOT build
>>>>>> should
>>>>>>
>>>>> be
>>>>> reasonably stable. We try to keep trunk stable.
>>>>>
>>>>> I want to try to get a release out soon, but I don't have a specific
>>>>> time
>>>>> table. I'll try to get in done in January if all goes well.
>>>>>
>>>>> -> richard
>>>>>
>>>>>
>>>>>   Thanks!
>>>>>
>>>>>> Jad.
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Fri, Dec 21, 2012 at 6:49 AM, Richard S. Hall <
>>>>>> heavy@ungoverned.org
>>>>>>
>>>>>>  wrote:
>>>>>>>
>>>>>>>     It built fine for me. I'm was building with Java 7.
>>>>>>
>>>>>>  Regardless, I deployed snapshots of framework, main, and
>>>>>>> main.distribution, so just grab what you want from the Apache
>>>>>>> snapshot
>>>>>>> repo
>>>>>>> to try it out.
>>>>>>>
>>>>>>> -> richard
>>>>>>>
>>>>>>>
>>>>>>> On 12/20/12 18:56 , Jad Naous wrote:
>>>>>>>
>>>>>>>    It does look like the same issue.
>>>>>>>
>>>>>>>  Got the trunk/framework. mvn clean install gives:
>>>>>>>>
>>>>>>>> [INFO] --- maven-compiler-plugin:2.3.2:********compile
>>>>>>>>
>>>>>>>> (default-compile) @
>>>>>>>> org.apache.felix.framework ---
>>>>>>>> Dec 20, 2012 3:54:59 PM org.sonatype.guice.bean.****
>>>>>>>> reflect.Logs$JULSink
>>>>>>>> warn
>>>>>>>> WARNING: Error injecting: org.apache.maven.plugin.********
>>>>>>>> CompilerMojo
>>>>>>>> java.lang.********NoClassDefFoundError:
>>>>>>>> org/codehaus/plexus/compiler/********util/scan/******
>>>>>>>>
>>>>>>>> InclusionScanException
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> jad.
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Dec 20, 2012 at 3:22 PM, Richard S. Hall <
>>>>>>>> heavy@ungoverned.org
>>>>>>>>
>>>>>>>>   wrote:
>>>>>>>>
>>>>>>>>>      On 12/20/12 4:10 PM, Jad Naous wrote:
>>>>>>>>>
>>>>>>>>      If a bundle undergoes a refresh while ipojo is still
>>>>>>>> initializing
>>>>>>>>
>>>>>>>>>   components, a deadlock can happen.  The issue is that if ipojo is
>>>>>>>>>
>>>>>>>>>> attempting to register a service, it will be doing it while
>>>>>>>>>> synchronizing
>>>>>>>>>> on the InstanceCreator instance. It will then try to register a
>>>>>>>>>> service
>>>>>>>>>> which requires the framework's global lock.
>>>>>>>>>>
>>>>>>>>>>     Registering a service doesn't require a global, just a bundle
>>>>>>>>>> lock.
>>>>>>>>>> I
>>>>>>>>>>
>>>>>>>>>>   think this could be related to:
>>>>>>>>>>
>>>>>>>>>         https://issues.apache.org/**********jira/browse/FELIX-3761<https://issues.apache.org/********jira/browse/FELIX-3761>
>>>>>>>>> <htt**ps://issues.apache.org/********jira/browse/FELIX-3761<https://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>>> >
>>>>>>>>> <https**://issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>> <ht**tps://issues.apache.org/******jira/browse/FELIX-3761<https://issues.apache.org/****jira/browse/FELIX-3761>
>>>>>>>>> >
>>>>>>>>> <https:/**/issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>> >
>>>>>>>>> <http**s://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>> <http**s://issues.apache.org/**jira/**browse/FELIX-3761<https://issues.apache.org/**jira/browse/FELIX-3761>
>>>>>>>>> >
>>>>>>>>> <https:/**/issues.apache.org/******jira/**browse/FELIX-3761<http://issues.apache.org/****jira/**browse/FELIX-3761>
>>>>>>>>> <ht**tp://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>> >
>>>>>>>>> <http**://issues.apache.org/**jira/****browse/FELIX-3761<http://issues.apache.org/jira/****browse/FELIX-3761>
>>>>>>>>> <htt**p://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>> >
>>>>>>>>> <https**://issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>>> <http**://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>> >
>>>>>>>>>
>>>>>>>>> <https**://issues.apache.org/**jira/**browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3761<https://issues.apache.org/jira/browse/FELIX-3761>
>>>>>>>>> >
>>>>>>>>> This avoid grabbing the bundle lock when registering a service, so
>>>>>>>>> maybe
>>>>>>>>> it will help your situation. You could try to build the framework
>>>>>>>>> from
>>>>>>>>> trunk and see if it makes a difference.
>>>>>>>>>
>>>>>>>>> If you aren't able to build from trunk, let me know and I'll try to
>>>>>>>>> publish a snapshot build since I don't think we have a recent one
>>>>>>>>> (we
>>>>>>>>> should do this no matter what).
>>>>>>>>>
>>>>>>>>> -> richard
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>     If a refresh is happening in another thread, the refresh will
>>>>>>>>> be
>>>>>>>>> holding
>>>>>>>>>
>>>>>>>>>   the framework's global lock, which will then call IPOJO's
>>>>>>>>> extender,
>>>>>>>>>
>>>>>>>>>> which
>>>>>>>>>> then attempts to call a method on InstanceCreator, hence leading
>>>>>>>>>> to
>>>>>>>>>> the
>>>>>>>>>> deadlock.
>>>>>>>>>>
>>>>>>>>>> Here are the stack traces:
>>>>>>>>>>
>>>>>>>>>> Daemon Thread [Thread-1] (Suspended)
>>>>>>>>>> Object.wait(long) line: not available [native method]
>>>>>>>>>> Object[](Object).wait() line: 485
>>>>>>>>>> Felix.acquireBundleLock(**********BundleImpl, int) line: 4871
>>>>>>>>>> Felix.registerService(**********BundleImpl, String[], Object,
>>>>>>>>>> Dictionary)
>>>>>>>>>> line:
>>>>>>>>>> 3205
>>>>>>>>>> BundleContextImpl.**********registerService(String[], Object,
>>>>>>>>>> Dictionary)
>>>>>>>>>> line:
>>>>>>>>>> 346
>>>>>>>>>>
>>>>>>>>>> IPojoContext.registerService(**********String[], Object,
>>>>>>>>>> Dictionary)
>>>>>>>>>> line:
>>>>>>>>>> 385
>>>>>>>>>> ProvidedService.**********registerService() line: 362
>>>>>>>>>> ProvidedServiceHandler.__M_**********stateChanged(int) line: 509
>>>>>>>>>> ProvidedServiceHandler.**********stateChanged(int) line: not
>>>>>>>>>>
>>>>>>>>>> available
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> InstanceManager.setState(int) line: 536
>>>>>>>>>> InstanceManager.start() line: 418
>>>>>>>>>> ComponentFactory.**********createInstance(Dictionary,
>>>>>>>>>> IPojoContext,
>>>>>>>>>> HandlerManager[])
>>>>>>>>>> line: 179
>>>>>>>>>>
>>>>>>>>>> ComponentFactory(IPojoFactory)**********.**
>>>>>>>>>> createComponentInstance(******
>>>>>>>>>> Dictionary,
>>>>>>>>>> ServiceContext) line: 310
>>>>>>>>>> ComponentFactory(IPojoFactory)**********.**
>>>>>>>>>> createComponentInstance(******
>>>>>>>>>> Dictionary)
>>>>>>>>>> line: 239
>>>>>>>>>> InstanceCreator$**********ManagedInstance.create(**********
>>>>>>>>>> IPojoFactory)
>>>>>>>>>> line: 355
>>>>>>>>>> InstanceCreator.addInstance(**********Dictionary, long) line: 89
>>>>>>>>>> Extender.parse(Bundle, String) line: 306
>>>>>>>>>> Extender.startManagementFor(**********Bundle) line: 237
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Extender.access$600(Extender, Bundle) line: 52
>>>>>>>>>> Extender$CreatorThread.run() line: 769
>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>
>>>>>>>>>> Daemon Thread [FelixFrameworkWiring] (Suspended)
>>>>>>>>>> InstanceCreator.**********removeInstancesFromBundle(******
>>>>>>>>>> ****long)
>>>>>>>>>> line: 116
>>>>>>>>>> Extender.closeManagementFor(**********Bundle) line: 171
>>>>>>>>>> Extender.bundleChanged(**********BundleEvent) line: 153
>>>>>>>>>> EventDispatcher.**********invokeBundleListenerCallback(*****
>>>>>>>>>> *****Bundle,
>>>>>>>>>> EventListener,
>>>>>>>>>> EventObject) line: 868
>>>>>>>>>> EventDispatcher.**********fireEventImmediately(********
>>>>>>>>>>
>>>>>>>>>> EventDispatcher,
>>>>>>>>>>
>>>>>>>>>> int, Map,
>>>>>>>>>> EventObject, Dictionary) line: 789
>>>>>>>>>> EventDispatcher.**********fireBundleEvent(BundleEvent, Framework)
>>>>>>>>>>
>>>>>>>>>> line:
>>>>>>>>>>
>>>>>>>>>> 514
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Felix.fireBundleEvent(int, Bundle) line: 4244
>>>>>>>>>> Felix.stopBundle(BundleImpl, boolean) line: 2351
>>>>>>>>>> Felix$RefreshHelper.stop() line: 4629
>>>>>>>>>> Felix.refreshPackages(**********Collection, FrameworkListener[])
>>>>>>>>>>
>>>>>>>>>> line:
>>>>>>>>>>
>>>>>>>>>> 3951
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> FrameworkWiringImpl.run() line: 172
>>>>>>>>>> Thread.run() line: 662
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>

Re: IPOJO initialization + refresh deadlock

Posted by "Richard S. Hall" <he...@ungoverned.org>.
On 1/1/13 10:37, Jad Naous wrote:
> On Tue, Jan 1, 2013 at 6:21 AM, Richard S. Hall<he...@ungoverned.org>wrote:
>
>> On 1/1/13 06:09, Jad Naous wrote:
>>
>>> Happy new year!
>>>
>>> I'm running into another deadlock now. It seems like there needs to be a
>>> more rigorous study of how locking is used in the framework. In
>>> particular,
>>> it seems like the framework should not be invoking any listeners within
>>> the
>>> same thread that's executing the stopping/starting/refreshing of
>>> bundles...
>>> Anywhere that happens there will be a potential for a deadlock because of
>>> a
>>> misordering of lock acquisition. The framework should never call into user
>>> code with any locks held.
>>>
>> Yeah, tell me about it, but it is not possible in all cases,
>> unfortunately. I personally feel that all events should be asynchronous,
>> but that's another story.
>>
>> -> richard
>>
>>
> I'm happy to help fix this, but I need some pointers as to what needs to
> happen. For synchronous events, what are the requirements? Or is this not
> fixable? Can the lock be released before firing the events?

I don't think it can be fixed, some of these things are baked into the 
spec. I think the spec even states somewhere that synchronous event 
listeners must be careful since they may be holding framework locks, so 
they shouldn't try to do too much. Of course, that is not easy advice to 
follow since framework impls vary.

We even have bugs open that say we aren't holding locks when we should 
be, e.g.:

     https://issues.apache.org/jira/browse/FELIX-3806

This is one of the poorly designed parts of the OSGi spec. It was meant 
to work in a world were services can "come and go at anytime", but it 
allows users to clings to synchronous events to do tons of work.

-> richard

>
>>> Name: Thread-2
>>> State: WAITING on [Ljava.lang.Object;@4a018e1b
>>> Total blocked: 38,871,649  Total waited: 38,871,650
>>>
>>> Stack trace:
>>>    java.lang.Object.wait(Native Method)
>>> java.lang.Object.wait(Object.**java:485)
>>> org.apache.felix.framework.**Felix.acquireGlobalLock(Felix.**java:5033)
>>> org.apache.felix.framework.**StatefulResolver.resolve(**
>>> StatefulResolver.java:451)
>>> org.apache.felix.framework.**BundleWiringImpl.**searchDynamicImports(**
>>> BundleWiringImpl.java:1578)
>>> org.apache.felix.framework.**BundleWiringImpl.**
>>> findClassOrResourceByDelegatio**n(BundleWiringImpl.java:1478)
>>> org.apache.felix.framework.**BundleWiringImpl.access$400(**
>>> BundleWiringImpl.java:75)
>>> org.apache.felix.framework.**BundleWiringImpl$**
>>> BundleClassLoader.loadClass(**BundleWiringImpl.java:1882)
>>> java.lang.ClassLoader.**loadClass(ClassLoader.java:**247)
>>> org.apache.felix.framework.**BundleWiringImpl.**getClassByDelegation(**
>>> BundleWiringImpl.java:1356)
>>> org.apache.felix.framework.**ServiceRegistrationImpl$**
>>> ServiceReferenceImpl.**isAssignableTo(**ServiceRegistrationImpl.java:**
>>> 548)
>>> org.apache.felix.framework.**util.Util.isServiceAssignable(**
>>> Util.java:280)
>>> org.apache.felix.framework.**util.EventDispatcher.**
>>> invokeServiceListenerCallback(**EventDispatcher.java:916)
>>> org.apache.felix.framework.**util.EventDispatcher.**fireEventImmediately(
>>> **EventDispatcher.java:793)
>>> org.apache.felix.framework.**util.EventDispatcher.**fireServiceEvent(**
>>> EventDispatcher.java:543)
>>> org.apache.felix.framework.**Felix.fireServiceEvent(Felix.**java:4346)
>>> org.apache.felix.framework.**Felix.registerService(Felix.**java:3356)
>>> org.apache.felix.framework.**BundleContextImpl.**registerService(**
>>> BundleContextImpl.java:346)
>>> org.apache.felix.ipojo.**IPojoFactory.start(**IPojoFactory.java:613)
>>>      - locked org.apache.felix.ipojo.**ComponentFactory@468034b6
>>> org.apache.felix.ipojo.**Extender.**createAbstractFactory(**
>>> Extender.java:520)
>>> org.apache.felix.ipojo.**Extender.parse(Extender.java:**301)
>>> org.apache.felix.ipojo.**Extender.startManagementFor(**Extender.java:237)
>>> org.apache.felix.ipojo.**Extender.access$600(Extender.**java:52)
>>> org.apache.felix.ipojo.**Extender$CreatorThread.run(**Extender.java:769)
>>> java.lang.Thread.run(Thread.**java:662)
>>>
>>> Name: FelixFrameworkWiring
>>> State: BLOCKED on org.apache.felix.ipojo.**ComponentFactory@468034b6owned
>>> by: Thread-2
>>> Total blocked: 7  Total waited: 1
>>>
>>> Stack trace:
>>>    org.apache.felix.ipojo.**IPojoFactory.**removeFactoryStateListener(**
>>> IPojoFactory.java:511)
>>> org.apache.felix.ipojo.**InstanceCreator.removeFactory(**
>>> InstanceCreator.java:199)
>>> org.apache.felix.ipojo.**Extender.closeManagementFor(**Extender.java:180)
>>> org.apache.felix.ipojo.**Extender.bundleChanged(**Extender.java:153)
>>> org.apache.felix.framework.**util.EventDispatcher.**
>>> invokeBundleListenerCallback(**EventDispatcher.java:868)
>>> org.apache.felix.framework.**util.EventDispatcher.**fireEventImmediately(
>>> **EventDispatcher.java:789)
>>> org.apache.felix.framework.**util.EventDispatcher.**fireBundleEvent(**
>>> EventDispatcher.java:514)
>>> org.apache.felix.framework.**Felix.fireBundleEvent(Felix.**java:4330)
>>> org.apache.felix.framework.**Felix.stopBundle(Felix.java:**2451)
>>> org.apache.felix.framework.**Felix$RefreshHelper.stop(**Felix.java:4715)
>>> org.apache.felix.framework.**Felix.refreshPackages(Felix.**java:4037)
>>> org.apache.felix.framework.**FrameworkWiringImpl.run(**
>>> FrameworkWiringImpl.java:178)
>>> java.lang.Thread.run(Thread.**java:662)
>>>
>>>
>>>
>>> On Sat, Dec 22, 2012 at 6:39 PM, Richard S. Hall <heavy@ungoverned.org
>>>> wrote:
>>>   On 12/22/12 20:41 , Jad Naous wrote:
>>>>   Thanks! I was building with java6. Don't know if that is the issue.
>>>>> Anyway,
>>>>> I tested the snapshot, and looks like that fixes it.
>>>>>
>>>>> Any idea when 4.1.0 will be released? Do you know if
>>>>> http://svn.apache.org/viewvc?****view=revision&revision=**1421958<http://svn.apache.org/viewvc?**view=revision&revision=1421958>
>>>>> <http://svn.apache.org/**viewvc?view=revision&revision=**1421958<http://svn.apache.org/viewvc?view=revision&revision=1421958>>will
>>>>> apply
>>>>>
>>>>> cleanly onto 4.0.3? Otherwise, how stable do you think is
>>>>> 4.1.0-SNAPSHOT?
>>>>>
>>>>>   The release version will be 4.2.0, but the 4.1.0-SNAPSHOT build should
>>>> be
>>>> reasonably stable. We try to keep trunk stable.
>>>>
>>>> I want to try to get a release out soon, but I don't have a specific time
>>>> table. I'll try to get in done in January if all goes well.
>>>>
>>>> -> richard
>>>>
>>>>
>>>>   Thanks!
>>>>> Jad.
>>>>>
>>>>>
>>>>>
>>>>> On Fri, Dec 21, 2012 at 6:49 AM, Richard S. Hall <heavy@ungoverned.org
>>>>>
>>>>>> wrote:
>>>>>>
>>>>>    It built fine for me. I'm was building with Java 7.
>>>>>
>>>>>> Regardless, I deployed snapshots of framework, main, and
>>>>>> main.distribution, so just grab what you want from the Apache snapshot
>>>>>> repo
>>>>>> to try it out.
>>>>>>
>>>>>> -> richard
>>>>>>
>>>>>>
>>>>>> On 12/20/12 18:56 , Jad Naous wrote:
>>>>>>
>>>>>>    It does look like the same issue.
>>>>>>
>>>>>>> Got the trunk/framework. mvn clean install gives:
>>>>>>>
>>>>>>> [INFO] --- maven-compiler-plugin:2.3.2:******compile
>>>>>>> (default-compile) @
>>>>>>> org.apache.felix.framework ---
>>>>>>> Dec 20, 2012 3:54:59 PM org.sonatype.guice.bean.****
>>>>>>> reflect.Logs$JULSink
>>>>>>> warn
>>>>>>> WARNING: Error injecting: org.apache.maven.plugin.******CompilerMojo
>>>>>>> java.lang.******NoClassDefFoundError:
>>>>>>> org/codehaus/plexus/compiler/******util/scan/******
>>>>>>> InclusionScanException
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Thanks,
>>>>>>> jad.
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Dec 20, 2012 at 3:22 PM, Richard S. Hall <
>>>>>>> heavy@ungoverned.org
>>>>>>>
>>>>>>>   wrote:
>>>>>>>>      On 12/20/12 4:10 PM, Jad Naous wrote:
>>>>>>>      If a bundle undergoes a refresh while ipojo is still initializing
>>>>>>>>   components, a deadlock can happen.  The issue is that if ipojo is
>>>>>>>>> attempting to register a service, it will be doing it while
>>>>>>>>> synchronizing
>>>>>>>>> on the InstanceCreator instance. It will then try to register a
>>>>>>>>> service
>>>>>>>>> which requires the framework's global lock.
>>>>>>>>>
>>>>>>>>>     Registering a service doesn't require a global, just a bundle
>>>>>>>>> lock.
>>>>>>>>> I
>>>>>>>>>
>>>>>>>>>   think this could be related to:
>>>>>>>>         https://issues.apache.org/********jira/browse/FELIX-3761<https://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>>> <https**://issues.apache.org/****jira/**browse/FELIX-3761<https://issues.apache.org/****jira/browse/FELIX-3761>
>>>>>>>> <https:/**/issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>> <http**s://issues.apache.org/**jira/**browse/FELIX-3761<https://issues.apache.org/**jira/browse/FELIX-3761>
>>>>>>>> <https:/**/issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>>> <http**://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>> <https**://issues.apache.org/**jira/**browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3761<https://issues.apache.org/jira/browse/FELIX-3761>
>>>>>>>> This avoid grabbing the bundle lock when registering a service, so
>>>>>>>> maybe
>>>>>>>> it will help your situation. You could try to build the framework
>>>>>>>> from
>>>>>>>> trunk and see if it makes a difference.
>>>>>>>>
>>>>>>>> If you aren't able to build from trunk, let me know and I'll try to
>>>>>>>> publish a snapshot build since I don't think we have a recent one (we
>>>>>>>> should do this no matter what).
>>>>>>>>
>>>>>>>> -> richard
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>     If a refresh is happening in another thread, the refresh will be
>>>>>>>> holding
>>>>>>>>
>>>>>>>>   the framework's global lock, which will then call IPOJO's extender,
>>>>>>>>> which
>>>>>>>>> then attempts to call a method on InstanceCreator, hence leading to
>>>>>>>>> the
>>>>>>>>> deadlock.
>>>>>>>>>
>>>>>>>>> Here are the stack traces:
>>>>>>>>>
>>>>>>>>> Daemon Thread [Thread-1] (Suspended)
>>>>>>>>> Object.wait(long) line: not available [native method]
>>>>>>>>> Object[](Object).wait() line: 485
>>>>>>>>> Felix.acquireBundleLock(********BundleImpl, int) line: 4871
>>>>>>>>> Felix.registerService(********BundleImpl, String[], Object,
>>>>>>>>> Dictionary)
>>>>>>>>> line:
>>>>>>>>> 3205
>>>>>>>>> BundleContextImpl.********registerService(String[], Object,
>>>>>>>>> Dictionary)
>>>>>>>>> line:
>>>>>>>>> 346
>>>>>>>>>
>>>>>>>>> IPojoContext.registerService(********String[], Object, Dictionary)
>>>>>>>>> line:
>>>>>>>>> 385
>>>>>>>>> ProvidedService.********registerService() line: 362
>>>>>>>>> ProvidedServiceHandler.__M_********stateChanged(int) line: 509
>>>>>>>>> ProvidedServiceHandler.********stateChanged(int) line: not
>>>>>>>>> available
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> InstanceManager.setState(int) line: 536
>>>>>>>>> InstanceManager.start() line: 418
>>>>>>>>> ComponentFactory.********createInstance(Dictionary, IPojoContext,
>>>>>>>>> HandlerManager[])
>>>>>>>>> line: 179
>>>>>>>>>
>>>>>>>>> ComponentFactory(IPojoFactory)********.**
>>>>>>>>> createComponentInstance(******
>>>>>>>>> Dictionary,
>>>>>>>>> ServiceContext) line: 310
>>>>>>>>> ComponentFactory(IPojoFactory)********.**
>>>>>>>>> createComponentInstance(******
>>>>>>>>> Dictionary)
>>>>>>>>> line: 239
>>>>>>>>> InstanceCreator$********ManagedInstance.create(********
>>>>>>>>> IPojoFactory)
>>>>>>>>> line: 355
>>>>>>>>> InstanceCreator.addInstance(********Dictionary, long) line: 89
>>>>>>>>> Extender.parse(Bundle, String) line: 306
>>>>>>>>> Extender.startManagementFor(********Bundle) line: 237
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Extender.access$600(Extender, Bundle) line: 52
>>>>>>>>> Extender$CreatorThread.run() line: 769
>>>>>>>>> Thread.run() line: 662
>>>>>>>>>
>>>>>>>>> Daemon Thread [FelixFrameworkWiring] (Suspended)
>>>>>>>>> InstanceCreator.********removeInstancesFromBundle(********long)
>>>>>>>>> line: 116
>>>>>>>>> Extender.closeManagementFor(********Bundle) line: 171
>>>>>>>>> Extender.bundleChanged(********BundleEvent) line: 153
>>>>>>>>> EventDispatcher.********invokeBundleListenerCallback(***
>>>>>>>>> *****Bundle,
>>>>>>>>> EventListener,
>>>>>>>>> EventObject) line: 868
>>>>>>>>> EventDispatcher.********fireEventImmediately(********
>>>>>>>>> EventDispatcher,
>>>>>>>>>
>>>>>>>>> int, Map,
>>>>>>>>> EventObject, Dictionary) line: 789
>>>>>>>>> EventDispatcher.********fireBundleEvent(BundleEvent, Framework)
>>>>>>>>> line:
>>>>>>>>>
>>>>>>>>> 514
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Felix.fireBundleEvent(int, Bundle) line: 4244
>>>>>>>>> Felix.stopBundle(BundleImpl, boolean) line: 2351
>>>>>>>>> Felix$RefreshHelper.stop() line: 4629
>>>>>>>>> Felix.refreshPackages(********Collection, FrameworkListener[])
>>>>>>>>> line:
>>>>>>>>>
>>>>>>>>> 3951
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> FrameworkWiringImpl.run() line: 172
>>>>>>>>> Thread.run() line: 662
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>


Re: IPOJO initialization + refresh deadlock

Posted by Jad Naous <ja...@nerati.com>.
On Tue, Jan 1, 2013 at 6:21 AM, Richard S. Hall <he...@ungoverned.org>wrote:

> On 1/1/13 06:09, Jad Naous wrote:
>
>> Happy new year!
>>
>> I'm running into another deadlock now. It seems like there needs to be a
>> more rigorous study of how locking is used in the framework. In
>> particular,
>> it seems like the framework should not be invoking any listeners within
>> the
>> same thread that's executing the stopping/starting/refreshing of
>> bundles...
>> Anywhere that happens there will be a potential for a deadlock because of
>> a
>> misordering of lock acquisition. The framework should never call into user
>> code with any locks held.
>>
>
> Yeah, tell me about it, but it is not possible in all cases,
> unfortunately. I personally feel that all events should be asynchronous,
> but that's another story.
>
> -> richard
>
>
I'm happy to help fix this, but I need some pointers as to what needs to
happen. For synchronous events, what are the requirements? Or is this not
fixable? Can the lock be released before firing the events?


>
>> Name: Thread-2
>> State: WAITING on [Ljava.lang.Object;@4a018e1b
>> Total blocked: 38,871,649  Total waited: 38,871,650
>>
>> Stack trace:
>>   java.lang.Object.wait(Native Method)
>> java.lang.Object.wait(Object.**java:485)
>> org.apache.felix.framework.**Felix.acquireGlobalLock(Felix.**java:5033)
>> org.apache.felix.framework.**StatefulResolver.resolve(**
>> StatefulResolver.java:451)
>> org.apache.felix.framework.**BundleWiringImpl.**searchDynamicImports(**
>> BundleWiringImpl.java:1578)
>> org.apache.felix.framework.**BundleWiringImpl.**
>> findClassOrResourceByDelegatio**n(BundleWiringImpl.java:1478)
>> org.apache.felix.framework.**BundleWiringImpl.access$400(**
>> BundleWiringImpl.java:75)
>> org.apache.felix.framework.**BundleWiringImpl$**
>> BundleClassLoader.loadClass(**BundleWiringImpl.java:1882)
>> java.lang.ClassLoader.**loadClass(ClassLoader.java:**247)
>> org.apache.felix.framework.**BundleWiringImpl.**getClassByDelegation(**
>> BundleWiringImpl.java:1356)
>> org.apache.felix.framework.**ServiceRegistrationImpl$**
>> ServiceReferenceImpl.**isAssignableTo(**ServiceRegistrationImpl.java:**
>> 548)
>> org.apache.felix.framework.**util.Util.isServiceAssignable(**
>> Util.java:280)
>> org.apache.felix.framework.**util.EventDispatcher.**
>> invokeServiceListenerCallback(**EventDispatcher.java:916)
>> org.apache.felix.framework.**util.EventDispatcher.**fireEventImmediately(
>> **EventDispatcher.java:793)
>> org.apache.felix.framework.**util.EventDispatcher.**fireServiceEvent(**
>> EventDispatcher.java:543)
>> org.apache.felix.framework.**Felix.fireServiceEvent(Felix.**java:4346)
>> org.apache.felix.framework.**Felix.registerService(Felix.**java:3356)
>> org.apache.felix.framework.**BundleContextImpl.**registerService(**
>> BundleContextImpl.java:346)
>> org.apache.felix.ipojo.**IPojoFactory.start(**IPojoFactory.java:613)
>>     - locked org.apache.felix.ipojo.**ComponentFactory@468034b6
>> org.apache.felix.ipojo.**Extender.**createAbstractFactory(**
>> Extender.java:520)
>> org.apache.felix.ipojo.**Extender.parse(Extender.java:**301)
>> org.apache.felix.ipojo.**Extender.startManagementFor(**Extender.java:237)
>> org.apache.felix.ipojo.**Extender.access$600(Extender.**java:52)
>> org.apache.felix.ipojo.**Extender$CreatorThread.run(**Extender.java:769)
>> java.lang.Thread.run(Thread.**java:662)
>>
>> Name: FelixFrameworkWiring
>> State: BLOCKED on org.apache.felix.ipojo.**ComponentFactory@468034b6owned
>> by: Thread-2
>> Total blocked: 7  Total waited: 1
>>
>> Stack trace:
>>   org.apache.felix.ipojo.**IPojoFactory.**removeFactoryStateListener(**
>> IPojoFactory.java:511)
>> org.apache.felix.ipojo.**InstanceCreator.removeFactory(**
>> InstanceCreator.java:199)
>> org.apache.felix.ipojo.**Extender.closeManagementFor(**Extender.java:180)
>> org.apache.felix.ipojo.**Extender.bundleChanged(**Extender.java:153)
>> org.apache.felix.framework.**util.EventDispatcher.**
>> invokeBundleListenerCallback(**EventDispatcher.java:868)
>> org.apache.felix.framework.**util.EventDispatcher.**fireEventImmediately(
>> **EventDispatcher.java:789)
>> org.apache.felix.framework.**util.EventDispatcher.**fireBundleEvent(**
>> EventDispatcher.java:514)
>> org.apache.felix.framework.**Felix.fireBundleEvent(Felix.**java:4330)
>> org.apache.felix.framework.**Felix.stopBundle(Felix.java:**2451)
>> org.apache.felix.framework.**Felix$RefreshHelper.stop(**Felix.java:4715)
>> org.apache.felix.framework.**Felix.refreshPackages(Felix.**java:4037)
>> org.apache.felix.framework.**FrameworkWiringImpl.run(**
>> FrameworkWiringImpl.java:178)
>> java.lang.Thread.run(Thread.**java:662)
>>
>>
>>
>> On Sat, Dec 22, 2012 at 6:39 PM, Richard S. Hall <heavy@ungoverned.org
>> >wrote:
>>
>>  On 12/22/12 20:41 , Jad Naous wrote:
>>>
>>>  Thanks! I was building with java6. Don't know if that is the issue.
>>>> Anyway,
>>>> I tested the snapshot, and looks like that fixes it.
>>>>
>>>> Any idea when 4.1.0 will be released? Do you know if
>>>> http://svn.apache.org/viewvc?****view=revision&revision=**1421958<http://svn.apache.org/viewvc?**view=revision&revision=1421958>
>>>> <http://svn.apache.org/**viewvc?view=revision&revision=**1421958<http://svn.apache.org/viewvc?view=revision&revision=1421958>>will
>>>> apply
>>>>
>>>> cleanly onto 4.0.3? Otherwise, how stable do you think is
>>>> 4.1.0-SNAPSHOT?
>>>>
>>>>  The release version will be 4.2.0, but the 4.1.0-SNAPSHOT build should
>>> be
>>> reasonably stable. We try to keep trunk stable.
>>>
>>> I want to try to get a release out soon, but I don't have a specific time
>>> table. I'll try to get in done in January if all goes well.
>>>
>>> -> richard
>>>
>>>
>>>  Thanks!
>>>>
>>>> Jad.
>>>>
>>>>
>>>>
>>>> On Fri, Dec 21, 2012 at 6:49 AM, Richard S. Hall <heavy@ungoverned.org
>>>>
>>>>> wrote:
>>>>>
>>>>   It built fine for me. I'm was building with Java 7.
>>>>
>>>>> Regardless, I deployed snapshots of framework, main, and
>>>>> main.distribution, so just grab what you want from the Apache snapshot
>>>>> repo
>>>>> to try it out.
>>>>>
>>>>> -> richard
>>>>>
>>>>>
>>>>> On 12/20/12 18:56 , Jad Naous wrote:
>>>>>
>>>>>   It does look like the same issue.
>>>>>
>>>>>> Got the trunk/framework. mvn clean install gives:
>>>>>>
>>>>>> [INFO] --- maven-compiler-plugin:2.3.2:******compile
>>>>>> (default-compile) @
>>>>>> org.apache.felix.framework ---
>>>>>> Dec 20, 2012 3:54:59 PM org.sonatype.guice.bean.****
>>>>>> reflect.Logs$JULSink
>>>>>> warn
>>>>>> WARNING: Error injecting: org.apache.maven.plugin.******CompilerMojo
>>>>>> java.lang.******NoClassDefFoundError:
>>>>>> org/codehaus/plexus/compiler/******util/scan/******
>>>>>> InclusionScanException
>>>>>>
>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> jad.
>>>>>>
>>>>>>
>>>>>> On Thu, Dec 20, 2012 at 3:22 PM, Richard S. Hall <
>>>>>> heavy@ungoverned.org
>>>>>>
>>>>>>  wrote:
>>>>>>>
>>>>>>>     On 12/20/12 4:10 PM, Jad Naous wrote:
>>>>>>
>>>>>>     If a bundle undergoes a refresh while ipojo is still initializing
>>>>>>>
>>>>>>>  components, a deadlock can happen.  The issue is that if ipojo is
>>>>>>>> attempting to register a service, it will be doing it while
>>>>>>>> synchronizing
>>>>>>>> on the InstanceCreator instance. It will then try to register a
>>>>>>>> service
>>>>>>>> which requires the framework's global lock.
>>>>>>>>
>>>>>>>>    Registering a service doesn't require a global, just a bundle
>>>>>>>> lock.
>>>>>>>> I
>>>>>>>>
>>>>>>>>  think this could be related to:
>>>>>>>
>>>>>>>        https://issues.apache.org/********jira/browse/FELIX-3761<https://issues.apache.org/******jira/browse/FELIX-3761>
>>>>>>> <https**://issues.apache.org/****jira/**browse/FELIX-3761<https://issues.apache.org/****jira/browse/FELIX-3761>
>>>>>>> >
>>>>>>> <https:/**/issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>> <http**s://issues.apache.org/**jira/**browse/FELIX-3761<https://issues.apache.org/**jira/browse/FELIX-3761>
>>>>>>> >
>>>>>>> <https:/**/issues.apache.org/****jira/**browse/FELIX-3761<http://issues.apache.org/**jira/**browse/FELIX-3761>
>>>>>>> <http**://issues.apache.org/jira/****browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>> >
>>>>>>> <https**://issues.apache.org/**jira/**browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3761<https://issues.apache.org/jira/browse/FELIX-3761>
>>>>>>> >
>>>>>>>
>>>>>>>
>>>>>>> This avoid grabbing the bundle lock when registering a service, so
>>>>>>> maybe
>>>>>>> it will help your situation. You could try to build the framework
>>>>>>> from
>>>>>>> trunk and see if it makes a difference.
>>>>>>>
>>>>>>> If you aren't able to build from trunk, let me know and I'll try to
>>>>>>> publish a snapshot build since I don't think we have a recent one (we
>>>>>>> should do this no matter what).
>>>>>>>
>>>>>>> -> richard
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>    If a refresh is happening in another thread, the refresh will be
>>>>>>> holding
>>>>>>>
>>>>>>>  the framework's global lock, which will then call IPOJO's extender,
>>>>>>>> which
>>>>>>>> then attempts to call a method on InstanceCreator, hence leading to
>>>>>>>> the
>>>>>>>> deadlock.
>>>>>>>>
>>>>>>>> Here are the stack traces:
>>>>>>>>
>>>>>>>> Daemon Thread [Thread-1] (Suspended)
>>>>>>>> Object.wait(long) line: not available [native method]
>>>>>>>> Object[](Object).wait() line: 485
>>>>>>>> Felix.acquireBundleLock(********BundleImpl, int) line: 4871
>>>>>>>> Felix.registerService(********BundleImpl, String[], Object,
>>>>>>>> Dictionary)
>>>>>>>> line:
>>>>>>>> 3205
>>>>>>>> BundleContextImpl.********registerService(String[], Object,
>>>>>>>> Dictionary)
>>>>>>>> line:
>>>>>>>> 346
>>>>>>>>
>>>>>>>> IPojoContext.registerService(********String[], Object, Dictionary)
>>>>>>>> line:
>>>>>>>> 385
>>>>>>>> ProvidedService.********registerService() line: 362
>>>>>>>> ProvidedServiceHandler.__M_********stateChanged(int) line: 509
>>>>>>>> ProvidedServiceHandler.********stateChanged(int) line: not
>>>>>>>> available
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> InstanceManager.setState(int) line: 536
>>>>>>>> InstanceManager.start() line: 418
>>>>>>>> ComponentFactory.********createInstance(Dictionary, IPojoContext,
>>>>>>>> HandlerManager[])
>>>>>>>> line: 179
>>>>>>>>
>>>>>>>> ComponentFactory(IPojoFactory)********.**
>>>>>>>> createComponentInstance(******
>>>>>>>> Dictionary,
>>>>>>>> ServiceContext) line: 310
>>>>>>>> ComponentFactory(IPojoFactory)********.**
>>>>>>>> createComponentInstance(******
>>>>>>>> Dictionary)
>>>>>>>> line: 239
>>>>>>>> InstanceCreator$********ManagedInstance.create(********
>>>>>>>> IPojoFactory)
>>>>>>>> line: 355
>>>>>>>> InstanceCreator.addInstance(********Dictionary, long) line: 89
>>>>>>>> Extender.parse(Bundle, String) line: 306
>>>>>>>> Extender.startManagementFor(********Bundle) line: 237
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Extender.access$600(Extender, Bundle) line: 52
>>>>>>>> Extender$CreatorThread.run() line: 769
>>>>>>>> Thread.run() line: 662
>>>>>>>>
>>>>>>>> Daemon Thread [FelixFrameworkWiring] (Suspended)
>>>>>>>> InstanceCreator.********removeInstancesFromBundle(********long)
>>>>>>>> line: 116
>>>>>>>> Extender.closeManagementFor(********Bundle) line: 171
>>>>>>>> Extender.bundleChanged(********BundleEvent) line: 153
>>>>>>>> EventDispatcher.********invokeBundleListenerCallback(***
>>>>>>>> *****Bundle,
>>>>>>>> EventListener,
>>>>>>>> EventObject) line: 868
>>>>>>>> EventDispatcher.********fireEventImmediately(********
>>>>>>>> EventDispatcher,
>>>>>>>>
>>>>>>>> int, Map,
>>>>>>>> EventObject, Dictionary) line: 789
>>>>>>>> EventDispatcher.********fireBundleEvent(BundleEvent, Framework)
>>>>>>>> line:
>>>>>>>>
>>>>>>>> 514
>>>>>>>>
>>>>>>>>
>>>>>>>> Felix.fireBundleEvent(int, Bundle) line: 4244
>>>>>>>> Felix.stopBundle(BundleImpl, boolean) line: 2351
>>>>>>>> Felix$RefreshHelper.stop() line: 4629
>>>>>>>> Felix.refreshPackages(********Collection, FrameworkListener[])
>>>>>>>> line:
>>>>>>>>
>>>>>>>> 3951
>>>>>>>>
>>>>>>>>
>>>>>>>> FrameworkWiringImpl.run() line: 172
>>>>>>>> Thread.run() line: 662
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>

Re: IPOJO initialization + refresh deadlock

Posted by "Richard S. Hall" <he...@ungoverned.org>.
On 1/1/13 06:09, Jad Naous wrote:
> Happy new year!
>
> I'm running into another deadlock now. It seems like there needs to be a
> more rigorous study of how locking is used in the framework. In particular,
> it seems like the framework should not be invoking any listeners within the
> same thread that's executing the stopping/starting/refreshing of bundles...
> Anywhere that happens there will be a potential for a deadlock because of a
> misordering of lock acquisition. The framework should never call into user
> code with any locks held.

Yeah, tell me about it, but it is not possible in all cases, 
unfortunately. I personally feel that all events should be asynchronous, 
but that's another story.

-> richard

>
> Name: Thread-2
> State: WAITING on [Ljava.lang.Object;@4a018e1b
> Total blocked: 38,871,649  Total waited: 38,871,650
>
> Stack trace:
>   java.lang.Object.wait(Native Method)
> java.lang.Object.wait(Object.java:485)
> org.apache.felix.framework.Felix.acquireGlobalLock(Felix.java:5033)
> org.apache.felix.framework.StatefulResolver.resolve(StatefulResolver.java:451)
> org.apache.felix.framework.BundleWiringImpl.searchDynamicImports(BundleWiringImpl.java:1578)
> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1478)
> org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1882)
> java.lang.ClassLoader.loadClass(ClassLoader.java:247)
> org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1356)
> org.apache.felix.framework.ServiceRegistrationImpl$ServiceReferenceImpl.isAssignableTo(ServiceRegistrationImpl.java:548)
> org.apache.felix.framework.util.Util.isServiceAssignable(Util.java:280)
> org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:916)
> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:793)
> org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:543)
> org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4346)
> org.apache.felix.framework.Felix.registerService(Felix.java:3356)
> org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:346)
> org.apache.felix.ipojo.IPojoFactory.start(IPojoFactory.java:613)
>     - locked org.apache.felix.ipojo.ComponentFactory@468034b6
> org.apache.felix.ipojo.Extender.createAbstractFactory(Extender.java:520)
> org.apache.felix.ipojo.Extender.parse(Extender.java:301)
> org.apache.felix.ipojo.Extender.startManagementFor(Extender.java:237)
> org.apache.felix.ipojo.Extender.access$600(Extender.java:52)
> org.apache.felix.ipojo.Extender$CreatorThread.run(Extender.java:769)
> java.lang.Thread.run(Thread.java:662)
>
> Name: FelixFrameworkWiring
> State: BLOCKED on org.apache.felix.ipojo.ComponentFactory@468034b6 owned
> by: Thread-2
> Total blocked: 7  Total waited: 1
>
> Stack trace:
>   org.apache.felix.ipojo.IPojoFactory.removeFactoryStateListener(IPojoFactory.java:511)
> org.apache.felix.ipojo.InstanceCreator.removeFactory(InstanceCreator.java:199)
> org.apache.felix.ipojo.Extender.closeManagementFor(Extender.java:180)
> org.apache.felix.ipojo.Extender.bundleChanged(Extender.java:153)
> org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:868)
> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:789)
> org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:514)
> org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4330)
> org.apache.felix.framework.Felix.stopBundle(Felix.java:2451)
> org.apache.felix.framework.Felix$RefreshHelper.stop(Felix.java:4715)
> org.apache.felix.framework.Felix.refreshPackages(Felix.java:4037)
> org.apache.felix.framework.FrameworkWiringImpl.run(FrameworkWiringImpl.java:178)
> java.lang.Thread.run(Thread.java:662)
>
>
>
> On Sat, Dec 22, 2012 at 6:39 PM, Richard S. Hall <he...@ungoverned.org>wrote:
>
>> On 12/22/12 20:41 , Jad Naous wrote:
>>
>>> Thanks! I was building with java6. Don't know if that is the issue.
>>> Anyway,
>>> I tested the snapshot, and looks like that fixes it.
>>>
>>> Any idea when 4.1.0 will be released? Do you know if
>>> http://svn.apache.org/viewvc?**view=revision&revision=1421958<http://svn.apache.org/viewvc?view=revision&revision=1421958>will apply
>>> cleanly onto 4.0.3? Otherwise, how stable do you think is 4.1.0-SNAPSHOT?
>>>
>> The release version will be 4.2.0, but the 4.1.0-SNAPSHOT build should be
>> reasonably stable. We try to keep trunk stable.
>>
>> I want to try to get a release out soon, but I don't have a specific time
>> table. I'll try to get in done in January if all goes well.
>>
>> -> richard
>>
>>
>>> Thanks!
>>>
>>> Jad.
>>>
>>>
>>>
>>> On Fri, Dec 21, 2012 at 6:49 AM, Richard S. Hall <heavy@ungoverned.org
>>>> wrote:
>>>   It built fine for me. I'm was building with Java 7.
>>>> Regardless, I deployed snapshots of framework, main, and
>>>> main.distribution, so just grab what you want from the Apache snapshot
>>>> repo
>>>> to try it out.
>>>>
>>>> -> richard
>>>>
>>>>
>>>> On 12/20/12 18:56 , Jad Naous wrote:
>>>>
>>>>   It does look like the same issue.
>>>>> Got the trunk/framework. mvn clean install gives:
>>>>>
>>>>> [INFO] --- maven-compiler-plugin:2.3.2:****compile (default-compile) @
>>>>> org.apache.felix.framework ---
>>>>> Dec 20, 2012 3:54:59 PM org.sonatype.guice.bean.****
>>>>> reflect.Logs$JULSink
>>>>> warn
>>>>> WARNING: Error injecting: org.apache.maven.plugin.****CompilerMojo
>>>>> java.lang.****NoClassDefFoundError:
>>>>> org/codehaus/plexus/compiler/****util/scan/****InclusionScanException
>>>>>
>>>>>
>>>>> Thanks,
>>>>> jad.
>>>>>
>>>>>
>>>>> On Thu, Dec 20, 2012 at 3:22 PM, Richard S. Hall <heavy@ungoverned.org
>>>>>
>>>>>> wrote:
>>>>>>
>>>>>    On 12/20/12 4:10 PM, Jad Naous wrote:
>>>>>
>>>>>>    If a bundle undergoes a refresh while ipojo is still initializing
>>>>>>
>>>>>>> components, a deadlock can happen.  The issue is that if ipojo is
>>>>>>> attempting to register a service, it will be doing it while
>>>>>>> synchronizing
>>>>>>> on the InstanceCreator instance. It will then try to register a
>>>>>>> service
>>>>>>> which requires the framework's global lock.
>>>>>>>
>>>>>>>    Registering a service doesn't require a global, just a bundle lock.
>>>>>>> I
>>>>>>>
>>>>>> think this could be related to:
>>>>>>
>>>>>>        https://issues.apache.org/******jira/browse/FELIX-3761<https://issues.apache.org/****jira/browse/FELIX-3761>
>>>>>> <https:/**/issues.apache.org/**jira/**browse/FELIX-3761<https://issues.apache.org/**jira/browse/FELIX-3761>
>>>>>> <https:/**/issues.apache.org/**jira/**browse/FELIX-3761<http://issues.apache.org/jira/**browse/FELIX-3761>
>>>>>> <https**://issues.apache.org/jira/**browse/FELIX-3761<https://issues.apache.org/jira/browse/FELIX-3761>
>>>>>>
>>>>>> This avoid grabbing the bundle lock when registering a service, so
>>>>>> maybe
>>>>>> it will help your situation. You could try to build the framework from
>>>>>> trunk and see if it makes a difference.
>>>>>>
>>>>>> If you aren't able to build from trunk, let me know and I'll try to
>>>>>> publish a snapshot build since I don't think we have a recent one (we
>>>>>> should do this no matter what).
>>>>>>
>>>>>> -> richard
>>>>>>
>>>>>>
>>>>>>
>>>>>>    If a refresh is happening in another thread, the refresh will be
>>>>>> holding
>>>>>>
>>>>>>> the framework's global lock, which will then call IPOJO's extender,
>>>>>>> which
>>>>>>> then attempts to call a method on InstanceCreator, hence leading to
>>>>>>> the
>>>>>>> deadlock.
>>>>>>>
>>>>>>> Here are the stack traces:
>>>>>>>
>>>>>>> Daemon Thread [Thread-1] (Suspended)
>>>>>>> Object.wait(long) line: not available [native method]
>>>>>>> Object[](Object).wait() line: 485
>>>>>>> Felix.acquireBundleLock(******BundleImpl, int) line: 4871
>>>>>>> Felix.registerService(******BundleImpl, String[], Object, Dictionary)
>>>>>>> line:
>>>>>>> 3205
>>>>>>> BundleContextImpl.******registerService(String[], Object, Dictionary)
>>>>>>> line:
>>>>>>> 346
>>>>>>>
>>>>>>> IPojoContext.registerService(******String[], Object, Dictionary)
>>>>>>> line:
>>>>>>> 385
>>>>>>> ProvidedService.******registerService() line: 362
>>>>>>> ProvidedServiceHandler.__M_******stateChanged(int) line: 509
>>>>>>> ProvidedServiceHandler.******stateChanged(int) line: not available
>>>>>>>
>>>>>>>
>>>>>>> InstanceManager.setState(int) line: 536
>>>>>>> InstanceManager.start() line: 418
>>>>>>> ComponentFactory.******createInstance(Dictionary, IPojoContext,
>>>>>>> HandlerManager[])
>>>>>>> line: 179
>>>>>>>
>>>>>>> ComponentFactory(IPojoFactory)******.createComponentInstance(******
>>>>>>> Dictionary,
>>>>>>> ServiceContext) line: 310
>>>>>>> ComponentFactory(IPojoFactory)******.createComponentInstance(******
>>>>>>> Dictionary)
>>>>>>> line: 239
>>>>>>> InstanceCreator$******ManagedInstance.create(******IPojoFactory)
>>>>>>> line: 355
>>>>>>> InstanceCreator.addInstance(******Dictionary, long) line: 89
>>>>>>> Extender.parse(Bundle, String) line: 306
>>>>>>> Extender.startManagementFor(******Bundle) line: 237
>>>>>>>
>>>>>>>
>>>>>>> Extender.access$600(Extender, Bundle) line: 52
>>>>>>> Extender$CreatorThread.run() line: 769
>>>>>>> Thread.run() line: 662
>>>>>>>
>>>>>>> Daemon Thread [FelixFrameworkWiring] (Suspended)
>>>>>>> InstanceCreator.******removeInstancesFromBundle(******long) line: 116
>>>>>>> Extender.closeManagementFor(******Bundle) line: 171
>>>>>>> Extender.bundleChanged(******BundleEvent) line: 153
>>>>>>> EventDispatcher.******invokeBundleListenerCallback(******Bundle,
>>>>>>> EventListener,
>>>>>>> EventObject) line: 868
>>>>>>> EventDispatcher.******fireEventImmediately(******EventDispatcher,
>>>>>>> int, Map,
>>>>>>> EventObject, Dictionary) line: 789
>>>>>>> EventDispatcher.******fireBundleEvent(BundleEvent, Framework) line:
>>>>>>> 514
>>>>>>>
>>>>>>>
>>>>>>> Felix.fireBundleEvent(int, Bundle) line: 4244
>>>>>>> Felix.stopBundle(BundleImpl, boolean) line: 2351
>>>>>>> Felix$RefreshHelper.stop() line: 4629
>>>>>>> Felix.refreshPackages(******Collection, FrameworkListener[]) line:
>>>>>>> 3951
>>>>>>>
>>>>>>>
>>>>>>> FrameworkWiringImpl.run() line: 172
>>>>>>> Thread.run() line: 662
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>