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 <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 <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 <
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>
<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 <
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=**<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 <
he...@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 <
he...@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










Reply via email to