You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by dj...@apache.org on 2012/10/13 18:15:13 UTC

svn commit: r1397885 - /felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java

Author: djencks
Date: Sat Oct 13 16:15:13 2012
New Revision: 1397885

URL: http://svn.apache.org/viewvc?rev=1397885&view=rev
Log:
FELIX-3680 reorganize in process ref queues so they can be used to determine when all events processed

Modified:
    felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java

Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java?rev=1397885&r1=1397884&r2=1397885&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java Sat Oct 13 16:15:13 2012
@@ -125,6 +125,7 @@ public class DependencyManager implement
         final String serviceString = "Service " + m_dependencyMetadata.getInterface() + "/"
             + ref.getProperty( Constants.SERVICE_ID );
         final boolean release = m_componentManager.obtainReadLock( "DependencyManager.serviceChanged.1" );
+        Collection<ServiceReference> changes = null;
         try
         {
             switch ( event.getType() )
@@ -144,19 +145,16 @@ public class DependencyManager implement
                         {
                             //wait for enable to complete
                         }
-                        boolean process;
                         synchronized ( added )
                         {
-                            if (process = added.contains( ref ))
+                            if (!added.contains( ref ))
                             {
-                                added.remove( ref );
-                                m_size.incrementAndGet();
+                                break;
                             }
                         }
-                        if (process)
-                        {
-                            serviceAdded( ref );
-                        }
+                        m_size.incrementAndGet();
+                        changes = added;
+                        serviceAdded( ref );
                     }
                     else
                     {
@@ -188,17 +186,15 @@ public class DependencyManager implement
                             {
                                 //wait for enable to complete
                             }
-                            boolean process;
                             synchronized ( added )
                             {
-                                if (process = added.contains( ref ))
+                                if (!added.contains( ref ))
                                 {
-                                    added.remove( ref );
-                                    m_size.incrementAndGet();
+                                    break;
                                 }
                             }
-                            if (process)
-                            {
+                            changes = added;
+                            m_size.incrementAndGet();
                                 if ( isStatic() )
                                 {
                                     // if static reference: activate if currentl unsatisifed, otherwise no influence
@@ -219,7 +215,6 @@ public class DependencyManager implement
                                 }
                             }
 
-                        }
                     }
                     else if ( !targetFilterMatch( ref ) )
                     {
@@ -231,19 +226,16 @@ public class DependencyManager implement
                         {
                             //wait for enable to complete
                         }
-                        boolean process;
                         synchronized ( removed )
                         {
-                            if (process = removed.contains( ref ))
+                            if (!removed.contains( ref ))
                             {
-                                removed.remove( ref );
-                                m_size.decrementAndGet();
+                                break;
                             }
                         }
-                        if (process)
-                        {
-                            serviceRemoved( ref );
-                        }
+                        changes = removed;
+                        m_size.decrementAndGet();
+                        serviceRemoved( ref );
                     }
                     else
                     {
@@ -268,19 +260,16 @@ public class DependencyManager implement
                         {
                             //wait for enable to complete
                         }
-                        boolean process;
                         synchronized ( removed )
                         {
-                            if (process = removed.contains( ref ))
+                            if (!removed.contains( ref ))
                             {
-                                removed.remove( ref );
-                                m_size.decrementAndGet();
+                                break;
                             }
                         }
-                        if (process)
-                        {
-                            serviceRemoved( ref );
-                        }
+                        changes = removed;
+                        m_size.decrementAndGet();
+                        serviceRemoved( ref );
                     }
                     else
                     {
@@ -302,6 +291,13 @@ public class DependencyManager implement
         }
         finally
         {
+            if ( changes != null)
+            {
+                synchronized ( changes )
+                {
+                    changes.remove( ref );
+                }
+            }
             if ( release )
             {
                 m_componentManager.releaseReadLock( "DependencyManager.serviceChanged.1" );