[ https://issues.apache.org/jira/browse/FELIX-971?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Richard S. Hall resolved FELIX-971. ----------------------------------- Resolution: Fixed Fix Version/s: felix-1.6.0 Assignee: Richard S. Hall After thinking about this some more, I decided to move bundle context invalidation after all bundle shutdown tasks. The reason I decided to do this, is because there is no way we can guarantee a bundle cannot receive events between the time its BundleActivator.stop() method returns and until we invalidate its context, so it makes sense to keep the context valid until the bundle can no longer receive events. Further, the spec can be interpreted this way, since it says the context should be valid while the bundle is STARTING, ACTIVE, and STOPPING. A bundle is STOPPING during all of the bundle shutdown tasks, so this implies the context should be valid during this. Guillaume, could you see if your example works with out exceptions now? If so, please close this issue. Thanks. > Exception thrown in ServiceTracker at shutdown > ----------------------------------------------- > > Key: FELIX-971 > URL: https://issues.apache.org/jira/browse/FELIX-971 > Project: Felix > Issue Type: Bug > Components: Framework > Reporter: Guillaume Nodet > Assignee: Richard S. Hall > Priority: Minor > Fix For: felix-1.6.0 > > > ERROR: EventDispatcher: Error during dispatch. > (java.lang.IllegalStateException: Invalid BundleContext.) > java.lang.IllegalStateException: Invalid BundleContext. > at > org.apache.felix.framework.BundleContextImpl.checkValidity(BundleContextImpl.java:393) > at > org.apache.felix.framework.BundleContextImpl.ungetService(BundleContextImpl.java:362) > at > org.osgi.util.tracker.ServiceTracker.removedService(ServiceTracker.java:429) > at > org.osgi.util.tracker.ServiceTracker$Tracked.untrack(ServiceTracker.java:1126) > at > org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:957) > at > org.apache.felix.framework.util.EventDispatcher$4.run(EventDispatcher.java:812) > at java.security.AccessController.doPrivileged(Native Method) > at > org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:809) > at > org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:678) > at > org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:609) > at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:3379) > at org.apache.felix.framework.Felix.access$000(Felix.java:39) > at org.apache.felix.framework.Felix$1.serviceChanged(Felix.java:620) > at > org.apache.felix.framework.ServiceRegistry.fireServiceChanged(ServiceRegistry.java:571) > at > org.apache.felix.framework.ServiceRegistry.unregisterService(ServiceRegistry.java:105) > at > org.apache.felix.framework.ServiceRegistrationImpl.unregister(ServiceRegistrationImpl.java:120) > at > org.apache.felix.framework.ServiceRegistry.unregisterServices(ServiceRegistry.java:146) > at org.apache.felix.framework.Felix.stopBundle(Felix.java:1815) > at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:999) > at > org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:263) > at java.lang.Thread.run(Thread.java:613) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.