aries-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gavin Scott (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (ARIES-924) Deadlock in transaction wrappers BundleActivator
Date Mon, 05 Nov 2012 01:40:12 GMT

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

Gavin Scott updated ARIES-924:
------------------------------

    Description: 
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}

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


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


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

Mime
View raw message