Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Watson2007-07-11 17:45:59 +0000
committerThomas Watson2007-07-11 17:45:59 +0000
commit975f108de614b8725166de4a39b6f37552a95593 (patch)
treea4ece8de66272d473fe1ff76983b7ba00634835b
parent51389ed209e077db672d0ab989ea1bb7554b03f1 (diff)
downloadrt.equinox.framework-975f108de614b8725166de4a39b6f37552a95593.tar.gz
rt.equinox.framework-975f108de614b8725166de4a39b6f37552a95593.tar.xz
rt.equinox.framework-975f108de614b8725166de4a39b6f37552a95593.zip
Bug 190868On IBM JDK with opt level=cold, a Stack Overflow occurs when resolving a large set of interdependant bundles with lots of imports for the first time.
-rw-r--r--bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverImpl.java26
1 files changed, 17 insertions, 9 deletions
diff --git a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverImpl.java b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverImpl.java
index 96e4bad63..90509732c 100644
--- a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverImpl.java
+++ b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverImpl.java
@@ -880,15 +880,23 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
ResolverImpl.log(" - " + bundle + " is unresolvable"); //$NON-NLS-1$ //$NON-NLS-2$
return false;
}
- if (bundle.getState() == ResolverBundle.RESOLVED) {
- // 'bundle' is already resolved so just return
- if (DEBUG)
- ResolverImpl.log(" - " + bundle + " already resolved"); //$NON-NLS-1$ //$NON-NLS-2$
- return true;
- } else if (bundle.getState() == ResolverBundle.UNRESOLVED) {
- // 'bundle' is UNRESOLVED so move to RESOLVING
- bundle.clearWires();
- setBundleResolving(bundle);
+ switch (bundle.getState()) {
+ case ResolverBundle.RESOLVED :
+ // 'bundle' is already resolved so just return
+ if (DEBUG)
+ ResolverImpl.log(" - " + bundle + " already resolved"); //$NON-NLS-1$ //$NON-NLS-2$
+ return true;
+ case ResolverBundle.UNRESOLVED :
+ // 'bundle' is UNRESOLVED so move to RESOLVING
+ bundle.clearWires();
+ setBundleResolving(bundle);
+ break;
+ case ResolverBundle.RESOLVING :
+ if (cycle.contains(bundle))
+ return true;
+ break;
+ default :
+ break;
}
boolean failed = false;

Back to the top