Improved FELIX-3348 patch to avoid infinite loops.
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1244197 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/FrameworkStartLevelImpl.java b/framework/src/main/java/org/apache/felix/framework/FrameworkStartLevelImpl.java
index da1fb43..d6e7e79 100644
--- a/framework/src/main/java/org/apache/felix/framework/FrameworkStartLevelImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/FrameworkStartLevelImpl.java
@@ -252,6 +252,7 @@
{
// This thread loops forever, thus it should
// be a daemon thread.
+ Object previousRequest = null;
while (true)
{
Object request = null;
@@ -299,10 +300,19 @@
catch (IllegalStateException ise)
{
// Thrown if global lock cannot be acquired, in which case
- // just retry.
- synchronized (m_requests)
+ // just retry (unless we already did)
+ if (previousRequest == request)
{
- m_requests.add(0, request);
+ m_felix.getLogger().log(Logger.LOG_ERROR,
+ "Unexpected problem setting active start level to " + request, ise);
+ }
+ else
+ {
+ synchronized (m_requests)
+ {
+ m_requests.add(0, request);
+ previousRequest = request;
+ }
}
}
catch (Exception ex)