[ 
https://issues.apache.org/jira/browse/ARIES-974?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13509723#comment-13509723
 ] 

Mark Nuttall commented on ARIES-974:
------------------------------------

Hi Guillaume, 
We've recently started seeing this deadlock in our build environment. I'm not 
familiar with this area of the code, but may need to dig into it anyway. Have 
you by any chance had a look at this problem all ready? Do you have any 
thoughts on what might be happening?

Regards, 
Mark
                
> Deadlock with cycle between service / bean / listener
> -----------------------------------------------------
>
>                 Key: ARIES-974
>                 URL: https://issues.apache.org/jira/browse/ARIES-974
>             Project: Aries
>          Issue Type: Bug
>            Reporter: Guillaume Nodet
>
> Thread dump:
> {code}
> Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.12-b01-434 mixed mode):
> "pool-org.apache.servicemix.nmr.osgi-1.6.0.fuse-71-040-thread-2" prio=5 
> tid=7ff10dd5d000 nid=0x11e000000 waiting on condition [11dffd000]
>    java.lang.Thread.State: WAITING (parking)
>       at sun.misc.Unsafe.park(Native Method)
>       - parking to wait for  <7fba729a8> (a 
> java.util.concurrent.FutureTask$Sync)
>       at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
>       at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811)
>       at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:969)
>       at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1281)
>       at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:218)
>       at java.util.concurrent.FutureTask.get(FutureTask.java:83)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:93)
>       at 
> org.apache.aries.blueprint.di.RefRecipe.internalCreate(RefRecipe.java:62)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:106)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecipe.java:933)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:907)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:888)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:820)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:106)
>       at 
> org.apache.aries.blueprint.di.CollectionRecipe.internalCreate(CollectionRecipe.java:90)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:106)
>       at 
> org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe.createListeners(AbstractServiceReferenceRecipe.java:240)
>       at 
> org.apache.aries.blueprint.container.ReferenceRecipe.internalCreate(ReferenceRecipe.java:108)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)
>       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)
>       at 
> org.apache.aries.blueprint.di.RefRecipe.internalCreate(RefRecipe.java:62)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:106)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecipe.java:933)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:907)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:888)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:820)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)
>       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)
>       at 
> org.apache.aries.blueprint.di.RefRecipe.internalCreate(RefRecipe.java:62)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:106)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecipe.java:933)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:907)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:888)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:820)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)
>       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)
>       at 
> org.apache.aries.blueprint.di.RefRecipe.internalCreate(RefRecipe.java:62)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:106)
>       at 
> org.apache.aries.blueprint.container.ServiceRecipe.createService(ServiceRecipe.java:280)
>       at 
> org.apache.aries.blueprint.container.ServiceRecipe.internalGetService(ServiceRecipe.java:247)
>       at 
> org.apache.aries.blueprint.container.ServiceRecipe.getService(ServiceRecipe.java:349)
>       at 
> org.apache.aries.blueprint.container.ServiceRecipe$TriggerServiceFactory.getService(ServiceRecipe.java:502)
>       at 
> org.apache.felix.framework.ServiceRegistrationImpl.getFactoryUnchecked(ServiceRegistrationImpl.java:325)
>       at 
> org.apache.felix.framework.ServiceRegistrationImpl.access$100(ServiceRegistrationImpl.java:46)
>       at 
> org.apache.felix.framework.ServiceRegistrationImpl$1.call(ServiceRegistrationImpl.java:234)
>       at org.apache.felix.framework.Felix$6.call(Felix.java:2098)
>       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>       at java.lang.Thread.run(Thread.java:680)
> "pool-org.apache.servicemix.nmr.osgi-1.6.0.fuse-71-040-thread-1" prio=5 
> tid=7ff10bba2000 nid=0x11defd000 waiting on condition [11defb000]
>    java.lang.Thread.State: WAITING (parking)
>       at sun.misc.Unsafe.park(Native Method)
>       - parking to wait for  <7fba5acb8> (a 
> java.util.concurrent.FutureTask$Sync)
>       at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
>       at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811)
>       at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:969)
>       at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1281)
>       at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:218)
>       at java.util.concurrent.FutureTask.get(FutureTask.java:83)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:93)
>       at 
> org.apache.aries.blueprint.di.RefRecipe.internalCreate(RefRecipe.java:62)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:106)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecipe.java:933)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:907)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:888)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:820)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)
>       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)
>       at 
> org.apache.aries.blueprint.di.RefRecipe.internalCreate(RefRecipe.java:62)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:106)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecipe.java:933)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:907)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:888)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:820)
>       at 
> org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)
>       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>       at 
> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)
>       at 
> org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:245)
>       at 
> org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:183)
>       at 
> org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:649)
>       at 
> org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:356)
>       at 
> org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:255)
>       - locked <7fb6513b0> (a java.util.concurrent.atomic.AtomicBoolean)
>       at 
> org.apache.aries.blueprint.container.BlueprintExtender.checkBundle(BlueprintExtender.java:325)
>       at 
> org.apache.aries.blueprint.container.BlueprintExtender.bundleChanged(BlueprintExtender.java:243)
>       at 
> org.apache.aries.blueprint.container.BlueprintExtender$BlueprintBundleTrackerCustomizer.modifiedBundle(BlueprintExtender.java:471)
>       at 
> org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:198)
>       at 
> org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:128)
>       at 
> org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:468)
>       at 
> org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:161)
>       at 
> org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:117)
>       at 
> org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1103)
>       at 
> org.apache.felix.framework.util.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:696)
>       at 
> org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:484)
>       at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4479)
>       at org.apache.felix.framework.Felix$4.run(Felix.java:2019)
>       at org.apache.felix.framework.Felix$5.run(Felix.java:2061)
>       at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
>       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>       at java.lang.Thread.run(Thread.java:680)
> {code}
> Object creation stack:
> {code}
> executorConfigurator
>  - executorFactory
>    - managementStrategy
>      - servicemix
> - servicemix
>   - endpointStrategy
>     - executorFactory
> {code}
> Blueprint code: 
> https://github.com/apache/servicemix4-nmr/blob/dd66b65342d757d66af36988ecdc8f785dc61826/nmr/osgi/src/main/resources/OSGI-INF/blueprint/servicemix-nmr.xml
> Stripped xml
> {code}
>     <bean id="servicemix" class="org.apache.servicemix.nmr.core.ServiceMix"
>           init-method="init"
>           destroy-method="shutdown">
>         <property name="endpointRegistry" ref="endpointRegistry"/>
>         <property name="listenerRegistry" ref="listenerRegistry"/>
>         <property name="flowRegistry" ref="flowRegistry"/>
>         <property name="wireRegistry" ref="wireRegistry"/>
>         <property name="executorFactory" ref="executorFactory"/>
>         <property name="id" value="${nmrId}"/>
>     </bean>
>  
>     <reference id="managementStrategy" 
> interface="org.fusesource.commons.management.ManagementStrategy">
>         <reference-listener ref="servicemix" 
> bind-method="bindManagementStrategy" unbind-method="unbindManagementStrategy" 
> />
>     </reference>
>     <bean id="executorFactory" 
> class="org.apache.servicemix.executors.impl.ExecutorFactoryImpl">
>         <property name="defaultConfig">
>             <bean class="org.apache.servicemix.executors.impl.ExecutorConfig">
>                 <property name="allowCoreThreadTimeOut" 
> value="${allowCoreThreadTimeOut}"/>
>                 <property name="corePoolSize" value="${corePoolSize}"/>
>                 <property name="maximumPoolSize" value="${maximumPoolSize}"/>
>                 <property name="queueSize" value="${queueSize}"/>
>                 <property name="bypassIfSynchronous" 
> value="${bypassIfSynchronous}"/>
>             </bean>
>         </property>
>         <property name="managementStrategy" ref="managementStrategy"/>
>     </bean>
>     <service ref="executorFactory" 
> interface="org.apache.servicemix.executors.ExecutorFactory"/>
> {code}

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