Adam Purkiss created FELIX-4069:
-----------------------------------

             Summary: ConcurrentModificationException in 
ServiceFactoryComponentManager
                 Key: FELIX-4069
                 URL: https://issues.apache.org/jira/browse/FELIX-4069
             Project: Felix
          Issue Type: Bug
          Components: Declarative Services (SCR)
    Affects Versions: scr-1.6.2
         Environment: Windows 7
            Reporter: Adam Purkiss


During startup of our application that is heavily dependant on DS and felix we 
occasionally see the following error:

ERROR: Bundle DwsCoreImpl.DwsCoreLogProviderImpl [37] EventDispatcher: Error 
during dispatch. (java.util.ConcurrentModificationException)
java.util.ConcurrentModificationException
        at 
java.util.IdentityHashMap$IdentityHashMapIterator.nextIndex(IdentityHashMap.java:732)
        at java.util.IdentityHashMap$KeyIterator.next(IdentityHashMap.java:822)
        at 
org.apache.felix.scr.impl.manager.ServiceFactoryComponentManager.invokeBindMethod(ServiceFactoryComponentManager.java:204)
        at 
org.apache.felix.scr.impl.manager.DependencyManager.serviceAdded(DependencyManager.java:402)
        at 
org.apache.felix.scr.impl.manager.DependencyManager.serviceChanged(DependencyManager.java:159)
        at 
org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:932)
        at 
org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:793)
        at 
org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:543)
        at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4419)
        at org.apache.felix.framework.Felix.registerService(Felix.java:3423)
        at 
org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:346)
        at 
org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:660)
        at 
org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:644)
        at 
org.apache.felix.scr.impl.manager.AbstractComponentManager.registerComponentService(AbstractComponentManager.java:688)
        at 
org.apache.felix.scr.impl.manager.AbstractComponentManager$Unsatisfied.activate(AbstractComponentManager.java:1481)
        at 
org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:550)
        at 
org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:261)
        at 
org.apache.felix.scr.impl.config.ImmediateComponentHolder.enableComponents(ImmediateComponentHolder.java:328)
        at 
org.apache.felix.scr.impl.BundleComponentActivator.initialize(BundleComponentActivator.java:158)
        at 
org.apache.felix.scr.impl.BundleComponentActivator.<init>(BundleComponentActivator.java:113)
        at 
org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:261)
        at org.apache.felix.scr.impl.Activator.bundleChanged(Activator.java:179)
        at 
org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:868)
        at 
org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:789)
        at 
org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:514)
        at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4403)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:2092)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1291)
        at 
org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)
        at java.lang.Thread.run(Thread.java:722)
FrameworkEvent ERROR
java.util.ConcurrentModificationException
        at 
java.util.IdentityHashMap$IdentityHashMapIterator.nextIndex(IdentityHashMap.java:732)
        at java.util.IdentityHashMap$KeyIterator.next(IdentityHashMap.java:822)
        at 
org.apache.felix.scr.impl.manager.ServiceFactoryComponentManager.invokeBindMethod(ServiceFactoryComponentManager.java:204)
        at 
org.apache.felix.scr.impl.manager.DependencyManager.serviceAdded(DependencyManager.java:402)
        at 
org.apache.felix.scr.impl.manager.DependencyManager.serviceChanged(DependencyManager.java:159)
        at 
org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:932)
        at 
org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:793)
        at 
org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:543)
        at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4419)
        at org.apache.felix.framework.Felix.registerService(Felix.java:3423)
        at 
org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:346)
        at 
org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:660)
        at 
org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:644)
        at 
org.apache.felix.scr.impl.manager.AbstractComponentManager.registerComponentService(AbstractComponentManager.java:688)
        at 
org.apache.felix.scr.impl.manager.AbstractComponentManager$Unsatisfied.activate(AbstractComponentManager.java:1481)
        at 
org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:550)
        at 
org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:261)
        at 
org.apache.felix.scr.impl.config.ImmediateComponentHolder.enableComponents(ImmediateComponentHolder.java:328)
        at 
org.apache.felix.scr.impl.BundleComponentActivator.initialize(BundleComponentActivator.java:158)
        at 
org.apache.felix.scr.impl.BundleComponentActivator.<init>(BundleComponentActivator.java:113)
        at 
org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:261)
        at org.apache.felix.scr.impl.Activator.bundleChanged(Activator.java:179)
        at 
org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:868)
        at 
org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:789)
        at 
org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:514)
        at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4403)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:2092)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1291)
        at 
org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)
        at java.lang.Thread.run(Thread.java:722)


Looking at the ServiceFactoryComponentManager we see there is no protection 
around the iteration over components which makes it no surprise that the code 
is not thread safe and is suffering from concurrent modification. Although most 
of our system seems to be working this exception at startup is cause for wider 
concern on how thread safe the code is and if later on when we have even more 
services we will start seeing bigger issues that mean ditching scr and using 
some other solution.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to