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)