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 );