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

Dynamic greedy 1..1 references may activate with no reference service bound

    XMLWordPrintableJSON

Details

    Description

      If using a 1..1 cardinality for a dynamic greedy reference there is a timing issue possible which will cause SCR to unbind all reference when activating the component.

      The timing window involves at least two threads.

      1) thread 1 is in the process of activating the component with a 1..1 dynamic greedy reference to service X (ranking=1)
      2) thread 2 is in the process of registering another service X with a higher service ranking=100

      When this happens thread 1 determines it should bind service X ranking 1. Thread 1 creates the service component instance and enables the tracking of all the dependencies. It then proceeds to bind all the required services. Before binding service X ranking=1 thread 2 registers service X ranking=100. Thread 2 then finds the created service component instance that thread 1 has created (but is still in the process of binding all the services) and then thread 2 binds service X ranking=100. At this point thread 2 thinks the component actually got bound to service X ranking=1 so it begins to unbind it. Before unbinding, if thread 1 proceeds it will bind service X ranking=1. So now the component itself (depending on the implementation) will start using X ranking=1. But then thread 2 proceeds and it will unbind service X ranking=1.

      So basically we are left with this flow:

      1) bind X ranking=100
      2) bind X ranking=1
      3) unbind X ranking =1

      At this point the component will be confused and think it likely has no services to use.

      Attachments

        Issue Links

          Activity

            People

              tjwatson Tom Watson
              tjwatson Tom Watson
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: