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

Guillaume Nodet resolved ARIES-924.
-----------------------------------
       Resolution: Fixed
    Fix Version/s: transaction-jdbc-2.1.0
         Assignee: Guillaume Nodet

http://svn.apache.org/viewvc?view=revision&revision=1630770

> Deadlock in transaction wrappers BundleActivator
> ------------------------------------------------
>
>                 Key: ARIES-924
>                 URL: https://issues.apache.org/jira/browse/ARIES-924
>             Project: Aries
>          Issue Type: Bug
>          Components: Transaction
>    Affects Versions: 0.3
>            Reporter: Gavin Scott
>            Assignee: Guillaume Nodet
>             Fix For: transaction-jdbc-2.1.0
>
>
> There is a deadlock condition in org.apache.aries.transaction.jdbc.Activator. 
>  It is possible for start() and serviceChanged() to both call open() on the 
> Activator's ServiceTracker such that the start() thread has acquired the 
> transaction.wrappers bundle lock and needs to acquire the ServiceTracker's 
> monitor, and the serviceChanged() thread holds the ServiceTracker's monitor 
> and needs to acquire the transaction.wrappers bundle lock.  We are seeing 
> this particularly when running pax exam tests on our integration test server. 
>  
> Simply synchronizing all of the Activator's methods seems like a reasonable 
> fix.
> Sample stack traces are:
> {code}
> "Thread-6" daemon prio=10 tid=0x00007f97e80b7800 nid=0x1a7c waiting for 
> monitor entry [0x00007f97fd1f2000]
>    java.lang.Thread.State: BLOCKED (on object monitor)
>          at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:299)
>          - waiting to lock <0x00000000c4c06558> (a 
> org.osgi.util.tracker.ServiceTracker)
>          at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:273)
>          at 
> org.apache.aries.transaction.jdbc.Activator.start(Activator.java:58)
>          at 
> org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:629)
>          at org.apache.felix.framework.Felix.activateBundle(Felix.java:1904)
>          at org.apache.felix.framework.Felix.startBundle(Felix.java:1822)
>          at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:927)
>          at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:914)
>          at 
> org.apache.karaf.features.internal.FeaturesServiceImpl.installFeatures(FeaturesServiceImpl.java:353)
>          at 
> org.apache.karaf.features.internal.FeaturesServiceImpl$1.run(FeaturesServiceImpl.java:988)
> "CM Configuration Updater (ManagedService Update: 
> pid=org.apache.aries.transaction)" daemon prio=10 tid=0x00007f97e407d800 
> nid=0x1a5a in Object.wait() [0x00007f9818324000]
>    java.lang.Thread.State: WAITING (on object monitor)
>          at java.lang.Object.wait(Native Method)
>          - waiting on <0x00000000c403c2e8> (a [Ljava.lang.Object;)
>          at java.lang.Object.wait(Object.java:503)
>          at 
> org.apache.felix.framework.Felix.acquireBundleLock(Felix.java:4922)
>          - locked <0x00000000c403c2e8> (a [Ljava.lang.Object;)
>          at 
> org.apache.felix.framework.Felix.addServiceListener(Felix.java:2814)
>          at 
> org.apache.felix.framework.BundleContextImpl.addServiceListener(BundleContextImpl.java:246)
>          at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:308)
>          - locked <0x00000000c4c34e48> (a 
> org.osgi.util.tracker.ServiceTracker$Tracked)
>          - locked <0x00000000c4c06558> (a 
> org.osgi.util.tracker.ServiceTracker)
>          at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:273)
>          at 
> org.apache.aries.transaction.jdbc.Activator.serviceChanged(Activator.java:118)
>          at 
> org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:871)
>          at 
> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:733)
>          at 
> org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:662)
>          at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:3890)
>          at org.apache.felix.framework.Felix.access$000(Felix.java:79)
>          at org.apache.felix.framework.Felix$2.serviceChanged(Felix.java:728)
>          at 
> org.apache.felix.framework.ServiceRegistry.registerService(ServiceRegistry.java:107)
>          at org.apache.felix.framework.Felix.registerService(Felix.java:2979)
>          at 
> org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:313)
>          at 
> org.apache.aries.transaction.TransactionManagerService.start(TransactionManagerService.java:157)
>          at org.apache.aries.transaction.Activator.updated(Activator.java:63)
>          - locked <0x00000000c4be3b90> (a 
> org.apache.aries.transaction.Activator)
>          at 
> org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1160)
>          at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:104)
>          at java.lang.Thread.run(Thread.java:722)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to