Bug 396836 - NPE from KeyedHashSet$EquinoxSetIterator.hasNext
diff --git a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateImpl.java b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateImpl.java
index 75d62d8..6563479 100644
--- a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateImpl.java
+++ b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateImpl.java
@@ -664,18 +664,20 @@
BundleDescription[] getFragments(final BundleDescription host) {
final List<BundleDescription> fragments = new ArrayList<BundleDescription>();
- for (Iterator<KeyedElement> iter = bundleDescriptions.iterator(); iter.hasNext();) {
- BundleDescription bundle = (BundleDescription) iter.next();
- HostSpecification hostSpec = bundle.getHost();
+ synchronized (this.monitor) {
+ for (Iterator<KeyedElement> iter = bundleDescriptions.iterator(); iter.hasNext();) {
+ BundleDescription bundle = (BundleDescription) iter.next();
+ HostSpecification hostSpec = bundle.getHost();
- if (hostSpec != null) {
- BundleDescription[] hosts = hostSpec.getHosts();
- if (hosts != null)
- for (int i = 0; i < hosts.length; i++)
- if (hosts[i] == host) {
- fragments.add(bundle);
- break;
- }
+ if (hostSpec != null) {
+ BundleDescription[] hosts = hostSpec.getHosts();
+ if (hosts != null)
+ for (int i = 0; i < hosts.length; i++)
+ if (hosts[i] == host) {
+ fragments.add(bundle);
+ break;
+ }
+ }
}
}
return fragments.toArray(new BundleDescription[fragments.size()]);