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