ConcurrentModificationException in 
DirectoryWatcher.findBundlesWithFragmentsToRefresh
-------------------------------------------------------------------------------------

                 Key: FELIX-3416
                 URL: https://issues.apache.org/jira/browse/FELIX-3416
             Project: Felix
          Issue Type: Bug
          Components: File Install
    Affects Versions: fileinstall-3.2.0
            Reporter: Matt Magoffin


I recently upgraded to File Install 3.2.0, and while testing an application 
came across this exception:

In main loop, we have serious trouble: java.util.ConcurrentModificationException
java.util.ConcurrentModificationException
        at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
        at java.util.HashMap$KeyIterator.next(HashMap.java:828)
        at 
org.apache.felix.fileinstall.internal.DirectoryWatcher.findBundlesWithFragmentsToRefresh(DirectoryWatcher.java:1247)
        at 
org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:475)
        at 
org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:286)

Looking at the code, in the findBundlesWithFragmentsToRefresh() method, I see 
it iterates over a set while adding to the set, which violates the contract of 
the java.util.HashSet instance passed into the method:

protected void findBundlesWithFragmentsToRefresh(Set toRefresh) {
  for (Iterator iterator = toRefresh.iterator(); iterator.hasNext();) {
    ...
    toRefresh.add(hostBundle);
  }
}

Perhaps a temporary Set is needed within the iteration, so the found bundles 
can be added to the toRefresh set after the iteration loop?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to