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

Felix Meschberger resolved FELIX-3317.
--------------------------------------

    Resolution: Fixed

I think this works now. Will create follow-up issues if problems surface.
                
> Concurrency issue during Component Service registration
> -------------------------------------------------------
>
>                 Key: FELIX-3317
>                 URL: https://issues.apache.org/jira/browse/FELIX-3317
>             Project: Felix
>          Issue Type: Bug
>          Components: Declarative Services (SCR)
>    Affects Versions:  scr-1.6.0
>            Reporter: Felix Meschberger
>            Assignee: Felix Meschberger
>             Fix For: scr-1.6.2
>
>
> In our Sling-based application we saw the following behavior: The Sling 
> ResourceResolverFactory is a component being activated. Yet every now and 
> then a field of that component seems to become null which is not expected for 
> an activated ResourceResolverFactory component and thus causes a 
> NullPointerException.
> Upon inspection I saw, that for the same Declarative Services component two 
> Services have been registered where only one was actually expected.
> Turns out that consumers of the ResoureResovlerFactory where all bound to the 
> same service. The component on the other hand has been cycled due to a 
> configuration update. So one service is backed by a deactivated component 
> (whose field has been reset to null already) and the other service is live.
> The problem is that the service backed by the deactivated method has not been 
> unregistered and thus all consumers are hooked up to the deactivated instance 
> causing all sorts of problems ...
> This is what most probably happens in the AbstractComponentManager:
>          *  T1 Unsatisfied.activate has set the state to Active already 
> before calling registerService
>          *  T1 registerService is called but the service registration field 
> field is not assigned yet
>                     during registerService ServiceListeners are called
>          *  T2 A Configuration update comes in and 
> Satisfied(Active).deactivate is called
>          *  T2 calls unregisterComponentService; does nothing because the 
> service registration field is not assigned
>          *  T2 destroys component
>          *  T1 assigns field from service registration
> As a result the deactivated object's service registration may be unregistered 
> later when the component is cycled again and the second service registration 
> will only be unregistered when the providing bundle is restarted.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to