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/13 15:57:16 UTC

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

Author: rickhall
Date: Mon Feb 13 14:57:15 2012
New Revision: 1243546

URL: http://svn.apache.org/viewvc?rev=1243546&view=rev
Log:
Start level thread should catch exceptions to avoid terminating. (FELIX-3348)

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=1243546&r1=1243545&r2=1243546&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 Mon Feb 13 14:57:15 2012
@@ -292,7 +292,24 @@ class FrameworkStartLevelImpl implements
             if (request instanceof Integer)
             {
                 // Set the new framework start level.
-                m_felix.setActiveStartLevel(((Integer) request).intValue(), listeners);
+                try
+                {
+                    m_felix.setActiveStartLevel(((Integer) request).intValue(), listeners);
+                }
+                catch (IllegalStateException ise)
+                {
+                    // Thrown if global lock cannot be acquired, in which case
+                    // just retry.
+                    synchronized (m_requests)
+                    {
+                        m_requests.add(0, request);
+                    }
+                }
+                catch (Exception ex)
+                {
+                    m_felix.getLogger().log(Logger.LOG_ERROR,
+                        "Unexpected problem setting active start level to " + request, ex);
+                }
             }
             else
             {