You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by "Pepijn Noltes (JIRA)" <ji...@apache.org> on 2016/10/17 17:41:58 UTC

[jira] [Closed] (CELIX-376) serviceRegistration sometimes paired to invalidated serviceReference

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

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
(v6.3.4#6332)