[ https://issues.apache.org/jira/browse/CAMEL-6068?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Aki Yoshida updated CAMEL-6068: ------------------------------- Attachment: trunk-components-camel-blueprint-20130211.diff > CamelBlueprintContext may be wrongly started and this may lead to a deadlock > ---------------------------------------------------------------------------- > > Key: CAMEL-6068 > URL: https://issues.apache.org/jira/browse/CAMEL-6068 > Project: Camel > Issue Type: Bug > Components: camel-blueprint > Affects Versions: 2.10.3 > Reporter: Aki Yoshida > Attachments: trunk-components-camel-blueprint-20130211.diff > > > We observed a deadlock situation that seems to be caused by the change that > came in with CAMEL-5712, which changed the way how CamelBlueprintContext is > started to solve another issue. > The current code listens to the service registered event for > org.osgi....BlueprintContainer (supposedly for its associated BP container) > and decides to start itself if not started. From the description of the > ticket, this change was intended to make sure the starting of the context > occurs after its BP container is registered. > In that case, should it be checking whether the received event belongs to the > same bundle? This checking is missing in the current code and consequently, > it may wrongly react to the event from another bundle's container > registration event. When this happens under some specific timing situation, > it may also lead to a deadlock. > So, should we be checking the event source in CamelBlueprintContext's > serviceChanged method? > Regards, aki > Stack trace from 2.10.3 > ======================================================================== > Name: Blueprint Extender: 3 > State: BLOCKED on java.lang.Object@9064b42 owned by: Blueprint Extender: 2 > Total blocked: 13 Total waited: 38 > Stack trace: > > org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:212) > org.apache.aries.blueprint.container.BlueprintRepository.createInstance(BlueprintRepository.java:198) > org.apache.aries.blueprint.container.BlueprintRepository.create(BlueprintRepository.java:137) > org.apache.aries.blueprint.container.BlueprintContainerImpl.getComponentInstance(BlueprintContainerImpl.java:709) > org.apache.camel.blueprint.BlueprintContainerRegistry.lookup(BlueprintContainerRegistry.java:41) > org.apache.camel.impl.CompositeRegistry.lookup(CompositeRegistry.java:68) > org.apache.camel.impl.PropertyPlaceholderDelegateRegistry.lookup(PropertyPlaceholderDelegateRegistry.java:49) > org.apache.camel.blueprint.BlueprintComponentResolver.resolveComponent(BlueprintComponentResolver.java:39) > org.apache.camel.impl.DefaultCamelContext.getComponent(DefaultCamelContext.java:314) > - locked > java.util.hash...@1660de94org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:456) > org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:50) > org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:186) > org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:108) > org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:114) > org.apache.camel.model.FromDefinition.resolveEndpoint(FromDefinition.java:72) > org.apache.camel.impl.DefaultRouteContext.getEndpoint(DefaultRouteContext.java:90) > org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:851) > org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:171) > org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:722) > org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:1789) > org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1575) > org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1444) > - locked > org.apache.camel.blueprint.BlueprintCamelContext@5011bafaorg.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60) > org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1412) > org.apache.camel.blueprint.BlueprintCamelContext.maybeStart(BlueprintCamelContext.java:127) > org.apache.camel.blueprint.BlueprintCamelContext.serviceChanged(BlueprintCamelContext.java:96) > org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:104) > org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861) > org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) > org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) > org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819) > org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771) > org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130) > org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214) > org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433) > org.apache.aries.blueprint.container.BlueprintContainerImpl.registerService(BlueprintContainerImpl.java:410) > org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:346) > org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:230) > - locked java.util.concurrent.atomic.AtomicBoolean@3cb3ada > - locked java.util.concurrent.atomic.AtomicBoolean@31b4d206 > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) > java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) > java.util.concurrent.FutureTask.run(FutureTask.java:138) > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98) > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206) > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) > java.lang.Thread.run(Thread.java:722) > ======================================================================== > Name: Blueprint Extender: 2 > State: BLOCKED on > org.apache.camel.blueprint.BlueprintCamelContext@5011bafa owned by: Blueprint > Extender: 3 > Total blocked: 24 Total waited: 58 > Stack trace: > > org.apache.camel.impl.DefaultCamelContext.getTypeConverter(DefaultCamelContext.java:1053) > org.apache.camel.util.EndpointHelper.setProperties(EndpointHelper.java:249) > org.apache.camel.impl.DefaultComponent.setProperties(DefaultComponent.java:222) > org.apache.camel.component.file.GenericFileComponent.createEndpoint(GenericFileComponent.java:64) > org.apache.camel.component.file.GenericFileComponent.createEndpoint(GenericFileComponent.java:36) > org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:91) > org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:461) > org.apache.camel.core.xml.AbstractCamelEndpointFactoryBean.getObject(AbstractCamelEndpointFactoryBean.java:46) > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > java.lang.reflect.Method.invoke(Method.java:597) > org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:226) > org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:824) > org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:234) > org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:706) > org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:64) > - locked java.lang.Object@9064b42 > org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:219) > - locked java.lang.Object@9064b42 > org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:147) > org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:631) > org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:337) > org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:230) > - locked java.util.concurrent.atomic.AtomicBoolean@53b00227 > - locked java.util.concurrent.atomic.AtomicBoolean@5648a168 > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) > java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) > java.util.concurrent.FutureTask.run(FutureTask.java:138) > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98) > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206) > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) > java.lang.Thread.run(Thread.java:722) -- 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