Deferred activation should happen immediately if the bundle has already
defined classes. (FELIX-749)
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@783121 13f79535-47bb-0310-9956-ffa450edef68
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 83d4b79..c2c0a52 100644
--- a/framework/src/main/java/org/apache/felix/framework/Felix.java
+++ b/framework/src/main/java/org/apache/felix/framework/Felix.java
@@ -1481,10 +1481,14 @@
// Set the bundle's context.
bundle.setBundleContext(new BundleContextImpl(m_logger, this, bundle));
- if (bundle.getRuntimeActivationPolicy() != IModule.LAZY_ACTIVATION)
+ // If the bundle's activation policy is eager or activation has already
+ // been triggered, then activate the bundle immediately.
+ if ((bundle.getRuntimeActivationPolicy() != IModule.LAZY_ACTIVATION)
+ || ((ModuleImpl) bundle.getCurrentModule()).isActivationTrigger())
{
activateBundle(bundle);
}
+ // Otherwise, defer bundle activation.
else
{
setBundleStateAndNotify(bundle, Bundle.STARTING);
diff --git a/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java b/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java
index 22bf794..508693f 100644
--- a/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java
@@ -1172,7 +1172,7 @@
return m_id;
}
- private synchronized boolean isActivationTrigger()
+ synchronized boolean isActivationTrigger()
{
return m_isActivationTriggered;
}
@@ -1633,7 +1633,7 @@
}
// Perform deferred activation without holding the class loader lock,
- // if necessary.
+ // if the class we are returning is the instigating class.
List list = (List) m_local.get();
if ((list != null)
&& (list.size() > 0)