[ 
https://issues.apache.org/jira/browse/FELIX-4069?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

David Jencks updated FELIX-4069:
--------------------------------

    Summary: [DS] ConcurrentModificationException in 
ServiceFactoryComponentManager  (was: ConcurrentModificationException in 
ServiceFactoryComponentManager)

> [DS] 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
>            Assignee: David Jencks
>             Fix For: scr-1.8.0
>
>
> 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 was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to