Return-Path: X-Original-To: apmail-felix-dev-archive@www.apache.org Delivered-To: apmail-felix-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 57547DFCC for ; Tue, 1 Jan 2013 16:52:08 +0000 (UTC) Received: (qmail 89350 invoked by uid 500); 1 Jan 2013 16:52:07 -0000 Delivered-To: apmail-felix-dev-archive@felix.apache.org Received: (qmail 89304 invoked by uid 500); 1 Jan 2013 16:52:07 -0000 Mailing-List: contact dev-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list dev@felix.apache.org Received: (qmail 89296 invoked by uid 99); 1 Jan 2013 16:52:07 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 01 Jan 2013 16:52:07 +0000 X-ASF-Spam-Status: No, hits=2.2 required=5.0 tests=HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_NEUTRAL X-Spam-Check-By: apache.org Received-SPF: neutral (nike.apache.org: local policy) Received: from [209.85.210.171] (HELO mail-ia0-f171.google.com) (209.85.210.171) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 01 Jan 2013 16:51:59 +0000 Received: by mail-ia0-f171.google.com with SMTP id k27so11341154iad.30 for ; Tue, 01 Jan 2013 08:51:37 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:x-gm-message-state; bh=aJLDzwCVQITbT26MwqwkBVNZ16VRYEm8RpywCLiZWng=; b=fiEyAgSHSB6SVuMfYkowH7hFh7OfmH/AnzIuiRrgrtDPlf7aQ97TqvTwlrD6NrrZEo brSLr6W+u7Y812+iqmt4eMB4T19heRR/Bvrm6MnJw3vzI8L4Aum1zUA4vxfLQFj3dSAE bEDyXh2NJa6DAJMSS0U8LteuiD2Xr2uJfF3aPb62k8SldV4deldtX4uqSNMf1QPbWBrw qzhGpkr1ludNnzZGxZ5MDzh+RcZ8g8A+VIqQ1FY8EqSYWUHOLqRy+qt/CKC7fSKGUpD/ 933JxyK1sVStRqB4njEephPRo/fRpjYwiHlzbNUNXZiB6LCFHpNNAfUuwNou1tHBLfKR 01fg== MIME-Version: 1.0 Received: by 10.43.56.71 with SMTP id wb7mr33335355icb.20.1357059097521; Tue, 01 Jan 2013 08:51:37 -0800 (PST) Received: by 10.50.109.200 with HTTP; Tue, 1 Jan 2013 08:51:37 -0800 (PST) In-Reply-To: <50E30F11.2010605@ungoverned.org> References: <50D39DCA.60007@ungoverned.org> <50D476FD.1020309@ungoverned.org> <50D66EDA.4080608@ungoverned.org> <50E2F0F8.2030904@ungoverned.org> <50E3079F.90507@ungoverned.org> <50E30F11.2010605@ungoverned.org> Date: Tue, 1 Jan 2013 08:51:37 -0800 Message-ID: Subject: Re: IPOJO initialization + refresh deadlock From: Jad Naous To: dev@felix.apache.org Content-Type: multipart/alternative; boundary=bcaec51d2306726db304d23cf1e5 X-Gm-Message-State: ALoCoQlHaEpo3qjKtqY3i0e7fB+4Sgb8BHNKUYT1paX3sVvc71rNNRVlFyCJTgcd1BR+QLOxEAGz X-Virus-Checked: Checked by ClamAV on apache.org --bcaec51d2306726db304d23cf1e5 Content-Type: text/plain; charset=ISO-8859-1 On Tue, Jan 1, 2013 at 8:30 AM, Richard S. Hall wrote: > On 1/1/13 11:13, Jad Naous wrote: > >> On Tue, Jan 1, 2013 at 7:58 AM, Richard S. Hall > >wrote: >> >> On 1/1/13 10:37, Jad Naous wrote: >>> >>> On Tue, Jan 1, 2013 at 6:21 AM, Richard S. Hall** >>>> >>>> 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. >>> >>> 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 >>>>>>>> >>>>>>> revision=**1421958 >>>>>>>> > >>>>>>>> >>>>>>> revision=1421958 >>>>>>>> >>>>>>>> > >>>>>>>> >>>>>>> ****1421958 >>>>>>>> >>>>>>> revision=**1421958 >>>>>>>> > >>>>>>>> >>>>>>> revision=1421958>>>>>>> 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 >>>>>>>>>>> > >>>>>>>>>>> >>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761 >>>>>>>>>>> > >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> > >>>>>>>>>>> >>>>>>>>>>> <**http://issues.apache.org/******jira/**browse/FELIX-3761 >>>>>>>>>>> > >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> > >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> > >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> > >>>>>>>>>>> >>>>>>>>>>> <**http://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 >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> > --bcaec51d2306726db304d23cf1e5--