Author: jwross
Date: Mon Aug 29 15:21:18 2011
New Revision: 1162856
URL: http://svn.apache.org/viewvc?rev=1162856&view=rev
Log:
ARIES-738: [subsystems] The subsystem resolver hook modifies a collection it's
iterating over.
Changed the for:each loop into a for loop using an Iterator. The
Iterator.remove method is then used to remove candidates when necessary.
Modified:
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResolverHook.java
Modified:
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResolverHook.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResolverHook.java?rev=1162856&r1=1162855&r2=1162856&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResolverHook.java
(original)
+++
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResolverHook.java
Mon Aug 29 15:21:18 2011
@@ -15,12 +15,12 @@ package org.apache.aries.subsystem.core.
import java.util.Collection;
import java.util.EnumSet;
+import java.util.Iterator;
import org.osgi.framework.hooks.resolver.ResolverHook;
import org.osgi.framework.wiring.BundleCapability;
import org.osgi.framework.wiring.BundleRequirement;
import org.osgi.framework.wiring.BundleRevision;
-import org.osgi.framework.wiring.Resource;
import org.osgi.service.subsystem.Subsystem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -38,8 +38,8 @@ public class SubsystemResolverHook imple
public void filterResolvable(Collection<BundleRevision> candidates) {
try {
- for (Resource candidate : candidates) {
- Collection<AriesSubsystem> subsystems =
AriesSubsystem.getSubsystems(candidate);
+ for (Iterator<BundleRevision> iterator =
candidates.iterator(); iterator.hasNext();) {
+ Collection<AriesSubsystem> subsystems =
AriesSubsystem.getSubsystems(iterator.next());
for (AriesSubsystem subsystem : subsystems) {
if (subsystem.isFeature()) {
// Feature subsystems require
no isolation.
@@ -48,7 +48,7 @@ public class SubsystemResolverHook imple
// Otherwise, the candidate is part of
an application or composite subsystem requiring isolation.
// But only when in the INSTALLING or
INSTALLED state.
if
(EnumSet.of(Subsystem.State.INSTALLING,
Subsystem.State.INSTALLED).contains(subsystem.getState())) {
- candidates.remove(candidate);
+ iterator.remove();
}
}
}