Pepijn Noltes closed CELIX-376.
    Resolution: Fixed

> serviceRegistration sometimes paired to invalidated serviceReference
> --------------------------------------------------------------------
>                 Key: CELIX-376
>                 URL: https://issues.apache.org/jira/browse/CELIX-376
>             Project: Celix
>          Issue Type: Bug
>          Components: Framework
>            Reporter: Gabriele Ricciardi
> If a bundle exporting a service is started/stopped frequently (e.g. start/1 
> sec/stop/1 sec/start ...) can happen that the serviceRegistration created 
> during the start is coupled to an invalidated serviceReference belonging to a 
> previous serviceRegistration.
> This is happening because the serviceRegistry stores the pairs 
> <serviceRegistration,serviceReference> using the address of the 
> serviceRegistration as index. In case of fast start/stop cycles, the 
> serviceRegistration is destroyed, the serviceReference is invalidated (but 
> not removed from the hashmap) and the new serviceRegistration is created 
> using the same address of the previous one (for the allocator is easy to 
> allocate the same memory for something we just destroyed reusing the same 
> memory chunk and the same pointer). Of course the hashMap is not updated.
> The effect is that when getting the serviceReference for the just created 
> serviceRegistration, we get back the invalidated one belonging to the old 
> serviceRegistration.
> Proposal is to use as index not the serviceRegistration pointer but the 
> serviceID, that is managed as monotonically increasing counter: this way the 
> key cannot be reused (we can ignore counter wraparound phenomenon, since they 
> may happen only when starting 4 billions services...) and the coupling 
> <serviceRegistration,serviceReference> should be always coherent.

This message was sent by Atlassian JIRA

Reply via email to