Author: rickhall
Date: Tue Feb 14 20:13:07 2012
New Revision: 1244197

URL: http://svn.apache.org/viewvc?rev=1244197&view=rev
Log:
Improved FELIX-3348 patch to avoid infinite loops.

Modified:
    
felix/trunk/framework/src/main/java/org/apache/felix/framework/FrameworkStartLevelImpl.java

Modified: 
felix/trunk/framework/src/main/java/org/apache/felix/framework/FrameworkStartLevelImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/FrameworkStartLevelImpl.java?rev=1244197&r1=1244196&r2=1244197&view=diff
==============================================================================
--- 
felix/trunk/framework/src/main/java/org/apache/felix/framework/FrameworkStartLevelImpl.java
 (original)
+++ 
felix/trunk/framework/src/main/java/org/apache/felix/framework/FrameworkStartLevelImpl.java
 Tue Feb 14 20:13:07 2012
@@ -252,6 +252,7 @@ class FrameworkStartLevelImpl implements
     {
         // This thread loops forever, thus it should
         // be a daemon thread.
+        Object previousRequest = null;
         while (true)
         {
             Object request = null;
@@ -299,10 +300,19 @@ class FrameworkStartLevelImpl implements
                 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)


Reply via email to