Moved removal pending flag from the module to the bundle. (FELIX-761)
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@703579 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/BundleInfo.java b/framework/src/main/java/org/apache/felix/framework/BundleInfo.java
index 31f5f2d..3be9371 100644
--- a/framework/src/main/java/org/apache/felix/framework/BundleInfo.java
+++ b/framework/src/main/java/org/apache/felix/framework/BundleInfo.java
@@ -30,6 +30,7 @@
abstract class BundleInfo
{
private Logger m_logger = null;
+ private boolean m_removalPending = false;
private IModule[] m_modules = null;
private int m_state = 0;
private BundleActivator m_activator = null;
@@ -65,6 +66,16 @@
return m_logger;
}
+ public synchronized boolean isRemovalPending()
+ {
+ return m_removalPending;
+ }
+
+ public synchronized void setRemovalPending(boolean removalPending)
+ {
+ m_removalPending = removalPending;
+ }
+
/**
* Returns an array of all modules associated with the bundle represented by
* this <tt>BundleInfo</tt> object. A module in the array corresponds to a
diff --git a/framework/src/main/java/org/apache/felix/framework/ExportedPackageImpl.java b/framework/src/main/java/org/apache/felix/framework/ExportedPackageImpl.java
index 84dcbfd..22056cf 100644
--- a/framework/src/main/java/org/apache/felix/framework/ExportedPackageImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/ExportedPackageImpl.java
@@ -88,7 +88,7 @@
public boolean isRemovalPending()
{
- return m_exportingModule.isRemovalPending();
+ return m_exportingBundle.getInfo().isRemovalPending();
}
public String toString()
diff --git a/framework/src/main/java/org/apache/felix/framework/Felix.java b/framework/src/main/java/org/apache/felix/framework/Felix.java
index c729154..b26a3db 100644
--- a/framework/src/main/java/org/apache/felix/framework/Felix.java
+++ b/framework/src/main/java/org/apache/felix/framework/Felix.java
@@ -1899,9 +1899,8 @@
fireBundleEvent(BundleEvent.UNRESOLVED, bundle);
- // Mark previous the bundle's old module for removal.
- ((ModuleImpl) info.getModules()[info.getModules().length - 2])
- .setRemovalPending(true);
+ // Mark the bundle as removal pending.
+ info.setRemovalPending(true);
fireBundleEvent(BundleEvent.UPDATED, bundle);
@@ -2137,9 +2136,8 @@
// Set the bundle's persistent state to uninstalled.
target.getInfo().setPersistentStateUninstalled();
- // Mark current module for removal since it can no longer
- // be used to resolve other modules per the spec.
- ((ModuleImpl) target.getInfo().getCurrentModule()).setRemovalPending(true);
+ // Mark the bundle as removal pending.
+ target.getInfo().setRemovalPending(true);
// Put bundle in uninstalled bundle array.
rememberUninstalledBundle(bundle);
@@ -2343,7 +2341,7 @@
if (bundle != null)
{
- ((ModuleImpl) bundle.getInfo().getCurrentModule()).setRemovalPending(true);
+ bundle.getInfo().setRemovalPending(true);
}
if ((System.getSecurityManager() != null) &&
diff --git a/framework/src/main/java/org/apache/felix/moduleloader/IModule.java b/framework/src/main/java/org/apache/felix/moduleloader/IModule.java
index d89898b..33f44ed 100644
--- a/framework/src/main/java/org/apache/felix/moduleloader/IModule.java
+++ b/framework/src/main/java/org/apache/felix/moduleloader/IModule.java
@@ -28,8 +28,6 @@
public IContentLoader getContentLoader();
public IWire[] getWires();
- public boolean isRemovalPending();
-
public Class getClass(String name) throws ClassNotFoundException;
public URL getResource(String name);
public Enumeration getResources(String name);
diff --git a/framework/src/main/java/org/apache/felix/moduleloader/ModuleImpl.java b/framework/src/main/java/org/apache/felix/moduleloader/ModuleImpl.java
index 7074a86..90902ac 100644
--- a/framework/src/main/java/org/apache/felix/moduleloader/ModuleImpl.java
+++ b/framework/src/main/java/org/apache/felix/moduleloader/ModuleImpl.java
@@ -29,7 +29,6 @@
{
private Logger m_logger = null;
private String m_id = null;
- private boolean m_removalPending = false;
private IModuleDefinition m_md = null;
private IContentLoader m_contentLoader = null;
private IModule[] m_fragments = null;
@@ -162,16 +161,6 @@
return m_dependents;
}
- public boolean isRemovalPending()
- {
- return m_removalPending;
- }
-
- public void setRemovalPending(boolean removalPending)
- {
- m_removalPending = removalPending;
- }
-
public Class getClass(String name) throws ClassNotFoundException
{
try