diff options
2 files changed, 10 insertions, 5 deletions
diff --git a/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/StateManager.java b/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/StateManager.java index 7a039bab0..5f491053e 100644 --- a/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/StateManager.java +++ b/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/StateManager.java @@ -298,7 +298,7 @@ public class StateManager implements PlatformAdmin, Runnable { } catch (InterruptedException e) { return; } - if (systemState != null && timeStamp == systemState.getTimeStamp()) + if (systemState != null && timeStamp == systemState.getTimeStamp() && !systemState.dynamicCacheChanged()) systemState.unloadLazyData(expireTime); } } 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 d6ba5059b..923f132cc 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 @@ -623,11 +623,15 @@ public abstract class StateImpl implements State { } public void fullyLoad() { - if (fullyLoaded == true) + if (reader == null) return; - if (reader != null && reader.isLazyLoaded()) - reader.fullyLoad(); - fullyLoaded = true; + synchronized (reader) { + if (fullyLoaded == true) + return; + if (reader.isLazyLoaded()) + reader.fullyLoad(); + fullyLoaded = true; + } } public void unloadLazyData(long expireTime) { @@ -637,6 +641,7 @@ public abstract class StateImpl implements State { reader.setAccessedFlag(false); // reset accessed flag return; } + fullyLoaded = false; BundleDescription[] bundles = getBundles(); for (int i = 0; i < bundles.length; i++) ((BundleDescriptionImpl) bundles[i]).unload(); |