Uploaded image for project: 'Felix'
  1. Felix
  2. FELIX-3910

Race conditions in DependencyManager

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • dependencymanager-3.0.0
    • dependencymanager-3.2.0
    • Dependency Manager
    • None
    • jdk1.6, jdk1.7, linux fc16

    Description

      In a multi threaded context, where dependencies are injected concurrently from different threads, we came across some exceptions which seem to take place from dependencymanager.

      I have tried to reproduce the problems using a paxexam test which I will commit.
      Not all exceptions are reproduced by the test case, but I think that the testcase really reproduces a problem.

      I also have a candidate patch, which I will submit to this jira issue.

      Here are the exceptions we have seen:

      first stacktrace seen:
      ===============

      ERROR: Bundle test.dm [21] EventDispatcher: Error during dispatch. (java.lang.NullPointerException)
      java.lang.NullPointerException
      at org.apache.felix.dm.impl.dependencies.ServiceDependencyImpl.addedService(ServiceDependencyImpl.java:481)
      at org.apache.felix.dm.tracker.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1325)
      at org.apache.felix.dm.tracker.AbstractTracked.trackAdding(AbstractTracked.java:290)
      at org.apache.felix.dm.tracker.AbstractTracked.track(AbstractTracked.java:236)
      at org.apache.felix.dm.tracker.ServiceTracker$Tracked.serviceChangedHideAspects(ServiceTracker.java:1206)
      at org.apache.felix.dm.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1101)
      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:4260)
      at org.apache.felix.framework.Felix.registerService(Felix.java:3275)
      at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:346)
      at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:320)
      at test.dm.race.RaceTest$RegistrationHelper$1.run(RaceTest.java:104)
      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:662)

      second exceptions:
      ==============

      ERROR: EventDispatcher: Error during dispatch. (java.lang.NullPointerException)
      java.lang.NullPointerException
      at org.apache.felix.dm.impl.ComponentImpl.invokeCallbackMethod(ComponentImpl.java:686)
      at org.apache.felix.dm.impl.dependencies.ServiceDependencyImpl.invoke(ServiceDependencyImpl.java:704)
      at org.apache.felix.dm.impl.dependencies.ServiceDependencyImpl.invokeRemoved(ServiceDependencyImpl.java:666)
      at org.apache.felix.dm.impl.dependencies.ServiceDependencyImpl.removedService(ServiceDependencyImpl.java:520)
      at org.apache.felix.dm.tracker.ServiceTracker$Tracked.customizerRemoved(ServiceTracker.java:1351)
      at org.apache.felix.dm.tracker.AbstractTracked.untrack(AbstractTracked.java:359)
      at org.apache.felix.dm.tracker.ServiceTracker$Tracked.serviceChangedHideAspects(ServiceTracker.java:1285)
      at org.apache.felix.dm.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1101)
      at org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:878)
      at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:732)
      at org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:662)
      at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:3587)
      at org.apache.felix.framework.Felix.access$000(Felix.java:40)
      at org.apache.felix.framework.Felix$1.serviceChanged(Felix.java:625)
      at org.apache.felix.framework.ServiceRegistry.unregisterService(ServiceRegistry.java:117)
      at org.apache.felix.framework.ServiceRegistrationImpl.unregister(ServiceRegistrationImpl.java:128)
      at org.apache.felix.dm.test.RaceTest$AFactory$2.run(RaceTest.java:151)
      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:662)

      Attachments

        1. FELIX-3910-patch
          10 kB
          Pierre De Rop
        2. FELIX-3910.patch.2
          9 kB
          Pierre De Rop
        3. FELIX-3910.patch.3
          10 kB
          Pierre De Rop
        4. FELIX-3910.patch.4
          3 kB
          Pierre De Rop
        5. FELIX-3910.patch.5.tgz
          20 kB
          Pierre De Rop
        6. FELIX-3910.patch.6.tgz
          20 kB
          Pierre De Rop

        Activity

          People

            pderop Pierre De Rop
            pderop Pierre De Rop
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: