[
https://issues.apache.org/jira/browse/FELIX-1044?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Felix Meschberger closed FELIX-1044.
------------------------------------
Internal testing shows that the issue is actually fixed. Therefore closing this
issue.
> DependencyManager may miss service registrations
> ------------------------------------------------
>
> Key: FELIX-1044
> URL: https://issues.apache.org/jira/browse/FELIX-1044
> Project: Felix
> Issue Type: Bug
> Components: Declarative Services (SCR)
> Affects Versions: scr-1.0.6
> Reporter: Felix Meschberger
> Assignee: Felix Meschberger
> Fix For: scr-1.0.8
>
>
> Instances of the DependencyManager class are used to track component
> references and to call the bind/unbind methods as appropriate.
> There are timing issues, which may cause instances of this class to miss
> services.
> The serviceAdded method checks whether the component is active before
> handling a service registration. Generally this works because the activation
> of the component will call the bind() method for all dependency managers. The
> problem arises if the service is registered _after_ the DependencyManager has
> bound registered services but before the component is fully active (e.g.
> while the activate() method is still running): In this case the service is
> received but not bound because the component is activating and because the
> dependency manager has already been called to bind to registered services,
> the registering service is lost.
> An approach to explore is to ignore the component state when deciding on
> whether to handle the event or not but to add a flag: The flag indicates
> whether the DependencyManager.bind method has already been called and hence
> future events should be handled. When the DependencyManager.unbind method is
> called, the flag should be cleare to prevent event handling. In other words:
> * Add boolean flag "open"
> * Add open(Object) method to be called during activation. This binds
> existing services and sets the "open" flag
> * Rename undinb(Object) called during deactivation to close(Object) . This
> unbinds all bound services and clears the "open" flag
> * Add a check for the "open" flag to the serviceChanged method
> * Remove the "handleEvent" method, whose functionality is replaced by the
> "open" flag
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.