diff options
author | Thomas Watson | 2007-07-11 17:45:59 +0000 |
---|---|---|
committer | Thomas Watson | 2007-07-11 17:45:59 +0000 |
commit | 975f108de614b8725166de4a39b6f37552a95593 (patch) | |
tree | a4ece8de66272d473fe1ff76983b7ba00634835b | |
parent | 51389ed209e077db672d0ab989ea1bb7554b03f1 (diff) | |
download | rt.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.java | 26 |
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; |