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.
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