FELIX-3680 recalculate size from query on service removal
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1402239 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
index b899e04..15d2def 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
@@ -236,11 +236,7 @@
}
}
changes = removed;
- if ( m_size.decrementAndGet() < 0 )
- {
- m_size.set( 0 );
-// throw new IllegalStateException( "Component: " + m_componentManager.getName() + ", Size less than zero for dependency manager " + getName() + " removed: " + removed );
- }
+ m_size.set( getServiceReferenceCount() );
serviceRemoved( ref );
}
else
@@ -274,11 +270,7 @@
}
}
changes = removed;
- if ( m_size.decrementAndGet() < 0 )
- {
- m_size.set( 0 );
-// throw new IllegalStateException( "Component: " + m_componentManager.getName() + ", Size less than zero for dependency manager " + getName() + " removed: " + removed );
- }
+ m_size.set( getServiceReferenceCount() );
serviceRemoved( ref );
}
else
@@ -736,6 +728,12 @@
return null;
}
+ private int getServiceReferenceCount()
+ {
+ ServiceReference[] refs = getFrameworkServiceReferences();
+ return refs == null? 0: refs.length;
+ }
+
/**
* Returns a <code>ServiceReference</code> instances for a service
@@ -1648,8 +1646,8 @@
}
else
{
- m_componentManager.log( LogService.LOG_DEBUG, "Component: {0} dependency: {1} no services, removed: {2}", new Object[]
- {m_componentManager.getName(), getName(), removed}, null );
+ m_componentManager.log( LogService.LOG_DEBUG, "Component: {0} dependency: {1} no services", new Object[]
+ {m_componentManager.getName(), getName()}, null );
removed.clear();//retainAll of empty set.
}
m_size.set( ( refArray == null ) ? 0 : refArray.length );