You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Tom Watson (Jira)" <ji...@apache.org> on 2020/09/10 15:21:00 UTC
[jira] [Assigned] (FELIX-6327) NoSuchElementException can occur
with SingleDynamicCustomizer when services are removed
[ https://issues.apache.org/jira/browse/FELIX-6327?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Tom Watson reassigned FELIX-6327:
---------------------------------
Assignee: Tom Watson
> NoSuchElementException can occur with SingleDynamicCustomizer when services are removed
> ---------------------------------------------------------------------------------------
>
> Key: FELIX-6327
> URL: https://issues.apache.org/jira/browse/FELIX-6327
> Project: Felix
> Issue Type: Bug
> Components: Declarative Services (SCR)
> Affects Versions: scr-2.1.22
> Reporter: Tom Watson
> Assignee: Tom Watson
> Priority: Critical
>
> The fix for issue FELIX-6317 introduced this issue. The following exception can occur when the bound reference is removed and an attempt is made to bind to the next best reference. If the reference is bound but then we detect that that reference has been removed then we check again for the next best service. If there are none then the following exception is thrown:
> {quote}
> java.util.NoSuchElementException
> at java.base/java.util.TreeMap$PrivateEntryIterator.nextEntry(TreeMap.java:1206)
> at java.base/java.util.TreeMap$ValueIterator.next(TreeMap.java:1253)
> at org.apache.felix.scr.impl.manager.DependencyManager$SingleDynamicCustomizer.tryinvokeBind(DependencyManager.java:939)
> at org.apache.felix.scr.impl.manager.DependencyManager$SingleDynamicCustomizer.removedService(DependencyManager.java:1036)
> at org.apache.felix.scr.impl.manager.DependencyManager$SingleDynamicCustomizer.removedService(DependencyManager.java:805)
> at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerRemoved(ServiceTracker.java:1226)
> at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerRemoved(ServiceTracker.java:1121)
> at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.untrack(ServiceTracker.java:981)
> at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1160)
> at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:114)
> {quote}
> There are some other issues with the current code where conditions could leave a DependencyManager in a state where it always thinks there is a thead working on tryinvokeBind. Additional safeguards are needed to ensure the state of the DependencyManager is restored on exit of tryinvokeBind.
> I'm marking as critical because this is a regression and likely worse than the original symptom of FELIX-6317 albeit probably much less likely to occur.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)