[ 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)