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

Felix Meschberger reopened FELIX-1162:
--------------------------------------


This patch is not correct, since it does not correctly handle reference 
counting.

When a bundle is activated all its component are created (along with the 
DependencyManagers). This sets all reference counters of the DependencyManagers 
(the m_size field) to the number of already registered services matching the 
reference. For references to services in the same bundle, this number is always 
zero.

After setting up the component they are scheduled for enablement. Thus all 
components are asynchronously enabled.

Now it may (and will) happen that services may be registered matching 
references of DependencyManagers without the respective reference counter being 
incremented because the DependencyManager is not yet enabled and thus not 
listening for service events.

When the component in question is then enabled, the DependencyManager still has 
the m_size field set to zero, where actually it should be 1 (or more). 
Consequently the reference may not be assumed satisified and hence the 
component may fail to activate.

The probable fix is to setup the initial value of the m_size not in the 
DependencyManager constructor but in the enable() method along with the service 
listener registration.

> Component.getReferences returns null if a component that has references is 
> not enabled.
> ---------------------------------------------------------------------------------------
>
>                 Key: FELIX-1162
>                 URL: https://issues.apache.org/jira/browse/FELIX-1162
>             Project: Felix
>          Issue Type: Bug
>          Components: Declarative Services (SCR)
>    Affects Versions: scr-1.0.8
>            Reporter: Agemo Cui
>            Assignee: Felix Meschberger
>            Priority: Minor
>             Fix For: scr-1.0.10
>
>         Attachments: FELIX-1162.patch
>
>
> The implementation of method 
> {color:blue}org.apache.felix.scr.Component.getReferences{color} in class 
> {color:blue}org.apache.felix.scr.impl.AbstractComponentManager{color} doesn't 
> use {color:red}m_componentMetadata{color} but 
> {color:red}m_dependencyManagers{color} to return the service references of a 
> component, which causes a calling of {color:blue}getReferences{color} to 
> return null before "enable component" is scheduled.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to