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)