Bug 449779 - Deadlock within the OSGi framework
- Ensure permission caches are cleared even with a null loader to invalidateWiring
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainerAdaptor.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainerAdaptor.java
index b2dbb2b..74058ea 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainerAdaptor.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainerAdaptor.java
@@ -147,25 +147,24 @@
if (current instanceof BundleLoader) {
BundleLoader bundleLoader = (BundleLoader) current;
bundleLoader.close();
- long updatedTimestamp = storage.getModuleDatabase().getRevisionsTimestamp();
- if (System.getSecurityManager() != null && updatedTimestamp != lastSecurityAdminFlush.getAndSet(updatedTimestamp)) {
- storage.getSecurityAdmin().clearCaches();
- List<Module> modules = storage.getModuleContainer().getModules();
- for (Module module : modules) {
- for (ModuleRevision revision : module.getRevisions().getModuleRevisions()) {
- Generation generation = (Generation) revision.getRevisionInfo();
- if (generation != null) {
- ProtectionDomain domain = generation.getDomain();
- if (domain != null) {
- ((BundlePermissions) domain.getPermissions()).clearPermissionCache();
- }
+ }
+ long updatedTimestamp = storage.getModuleDatabase().getRevisionsTimestamp();
+ if (System.getSecurityManager() != null && updatedTimestamp != lastSecurityAdminFlush.getAndSet(updatedTimestamp)) {
+ storage.getSecurityAdmin().clearCaches();
+ List<Module> modules = storage.getModuleContainer().getModules();
+ for (Module module : modules) {
+ for (ModuleRevision revision : module.getRevisions().getModuleRevisions()) {
+ Generation generation = (Generation) revision.getRevisionInfo();
+ if (generation != null) {
+ ProtectionDomain domain = generation.getDomain();
+ if (domain != null) {
+ ((BundlePermissions) domain.getPermissions()).clearPermissionCache();
}
}
}
}
}
clearManifestCache(moduleWiring);
-
}
private void clearManifestCache(ModuleWiring moduleWiring) {