You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Paul Bakker (JIRA)" <ji...@apache.org> on 2013/12/18 09:48:08 UTC
[jira] [Created] (FELIX-4361) Possible
ConcurrentModificationException in DependencyManager.getComponents()
Paul Bakker created FELIX-4361:
----------------------------------
Summary: Possible ConcurrentModificationException in DependencyManager.getComponents()
Key: FELIX-4361
URL: https://issues.apache.org/jira/browse/FELIX-4361
Project: Felix
Issue Type: Bug
Components: Dependency Manager
Affects Versions: dependencymanager-3.1.0
Reporter: Paul Bakker
DependencyManager.getComponents() returns a unmodifiableList created as follows:
{code}
Collections.unmodifiableList(m_components);
{code}
However, this does not provide safe iteration on the result of calling this method. E.g. the following can fail with a ConcurrentModificationException:
{code}
List<ComponentDeclaration> components = dm.getComponents();
for (ComponentDeclaration c : components) {
//do something
}
{code}
This is possible because the underlaying collection can be modified during iteration. Wrapping it in an unmodifiable list doesn't prevent this, because the modifications are done on the original list.
This can be fixed by copying the list to a new collection before returning. This is more expensive, but the only way to be safe.
Patch and test provided.
--
This message was sent by Atlassian JIRA
(v6.1.4#6159)