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

Felix Meschberger closed FELIX-3721.
------------------------------------

    
> Configuration not always provided upon initial service registration
> -------------------------------------------------------------------
>
>                 Key: FELIX-3721
>                 URL: https://issues.apache.org/jira/browse/FELIX-3721
>             Project: Felix
>          Issue Type: Bug
>          Components: Configuration Admin, Specification compliance
>    Affects Versions: configadmin-1.6.0
>         Environment: Java 6 on Linux platforms
>            Reporter: Felix Meschberger
>            Assignee: Felix Meschberger
>            Priority: Blocker
>             Fix For: configadmin-1.6.0
>
>
> With the changes to implement Targeted PIDs and refactoring of the service 
> trackers for FELIX-3577 and FELIX-3481 a race condition has been introduced 
> which may cause ManagedService and ManagedServiceFactory services to not be 
> called back  on initial registration.
> This has been exhibited by test build of the yet unpublished OSGi CT for 
> Configuration Admin, for example:
>     (1) ManagedService PID 1 registered
>     (2) ManagedService PID 2 registered
>     (3) ManagedService PID 2 called back
> The problem is, that before the call back to ManagedService PID 2, the call 
> back to ManagedService PID 1 is expected.
> Turns out that this race condition takes place, which may primarily be 
> reproduced on Linux platforms, probably due to different threading 
> implementations on the platform:
>    T1: register service
>    T1: call ServiceTracker.addingService
>    T1: schedule service update task
>    T2: run update task
>    T2: terminate update task without calling the service
>    T1: return from ServiceTracker.addingService returning ConfigurationMap
> This is expected since the service update task in T2 expects the 
> ConfigurationMap stored in the ServiceTracker. But this is not the case yet 
> because the ServiceTracker.addingService method has not yet returned it for 
> it to be stored in the ServiceTracker. Therefore T2 is not able to call back 
> the service and thus the update call never takes place.
> The fix is either to delay the task execution in T2 or to prepare the 
> ConfigurationMap in T1 and hand it over to the task to be executed in T2. The 
> first solution is suboptimal because we cannot find a timing value which (a) 
> does not delay too much bug (b) still makes sure the ConfigurationMap will 
> ultimately be available.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to