You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ri...@apache.org on 2012/02/14 21:13:07 UTC

svn commit: r1244197 - /felix/trunk/framework/src/main/java/org/apache/felix/framework/FrameworkStartLevelImpl.java

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)