diff options
author | Thomas Watson | 2008-11-21 23:21:32 +0000 |
---|---|---|
committer | Thomas Watson | 2008-11-21 23:21:32 +0000 |
commit | 4506f36e69b2ad582778e7e5a4d412cd264e88dd (patch) | |
tree | 4901e46804084475faf16a28f06834416ca719be /bundles/org.eclipse.osgi | |
parent | bb2dd2ada69075c405a92cc5f4b856d5d53fa584 (diff) | |
download | rt.equinox.framework-4506f36e69b2ad582778e7e5a4d412cd264e88dd.tar.gz rt.equinox.framework-4506f36e69b2ad582778e7e5a4d412cd264e88dd.tar.xz rt.equinox.framework-4506f36e69b2ad582778e7e5a4d412cd264e88dd.zip |
Bug 247522 StateImpl access bundleDescriptions field in unsafe manner
Diffstat (limited to 'bundles/org.eclipse.osgi')
-rw-r--r-- | bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateImpl.java | 17 |
1 files changed, 9 insertions, 8 deletions
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 11c9a12af..a017142e9 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 @@ -288,7 +288,7 @@ public abstract class StateImpl implements State { resolveBundle(bundle, status, hosts, selectedExports, null, resolvedRequires, resolvedImports); } - public synchronized void resolveBundle(BundleDescription bundle, boolean status, BundleDescription[] hosts, ExportPackageDescription[] selectedExports, ExportPackageDescription[] substitutedExports, BundleDescription[] resolvedRequires, ExportPackageDescription[] resolvedImports) { + public void resolveBundle(BundleDescription bundle, boolean status, BundleDescription[] hosts, ExportPackageDescription[] selectedExports, ExportPackageDescription[] substitutedExports, BundleDescription[] resolvedRequires, ExportPackageDescription[] resolvedImports) { synchronized (this.monitor) { if (!resolving) throw new IllegalStateException(); // TODO need error message here! @@ -802,16 +802,16 @@ public abstract class StateImpl implements State { } } - public synchronized ExportPackageDescription linkDynamicImport(BundleDescription importingBundle, String requestedPackage) { + public ExportPackageDescription linkDynamicImport(BundleDescription importingBundle, String requestedPackage) { if (resolver == null) throw new IllegalStateException("no resolver set"); //$NON-NLS-1$ BundleDescriptionImpl importer = (BundleDescriptionImpl) importingBundle; if (importer.getDynamicStamp(requestedPackage) == getTimeStamp()) return null; - try { - resolving = true; - fullyLoad(); - synchronized (this.monitor) { + fullyLoad(); + synchronized (this.monitor) { + try { + resolving = true; // ask the resolver to resolve our dynamic import ExportPackageDescriptionImpl result = (ExportPackageDescriptionImpl) resolver.resolveDynamicImport(importingBundle, requestedPackage); if (result == null) @@ -823,10 +823,11 @@ public abstract class StateImpl implements State { } setDynamicCacheChanged(true); return result; + } finally { + resolving = false; } - } finally { - resolving = false; } + } void setReader(StateReader reader) { |