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