You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "David Jencks (JIRA)" <ji...@apache.org> on 2013/05/19 04:01:17 UTC

[jira] [Resolved] (FELIX-4069) ConcurrentModificationException in ServiceFactoryComponentManager

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

David Jencks resolved FELIX-4069.
---------------------------------

       Resolution: Fixed
    Fix Version/s: scr-1.8.0

This should be fixed in rev 1484207.  Please try it out and let us know.

We don't have any tests for the ServiceFactory functionality -- I haven't figured out a good way to create enough bundles to test it -- so any feedback you can give would be really useful.
                
> 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 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