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:07 UTC
svn commit: r1397883 -
/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
Author: djencks
Date: Sat Oct 13 16:15:07 2012
New Revision: 1397883
URL: http://svn.apache.org/viewvc?rev=1397883&view=rev
Log:
FELIX-3680 track modified events concurrently
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=1397883&r1=1397882&r2=1397883&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:07 2012
@@ -176,38 +176,74 @@ public class DependencyManager implement
// service not currently bound --- what to do ?
// if static
// if inactive and target match: activate
- // if dynamic
+ // if dynamic or greedy
// if multiple and target match: bind
if ( targetFilterMatch( ref ) )
{
- // new filter match, so increase the counter
- m_size.incrementAndGet();
-
- if ( isStatic() )
+ synchronized ( added )
+ {
+ added.add( ref );
+ }
+ synchronized (enableLock)
+ {
+ //wait for enable to complete
+ }
+ boolean process;
+ synchronized ( added )
{
- // if static reference: activate if currentl unsatisifed, otherwise no influence
- if ( m_componentManager.getState() == AbstractComponentManager.STATE_UNSATISFIED )
+ if (process = added.contains( ref ))
{
- m_componentManager.log( LogService.LOG_DEBUG,
- "Dependency Manager: Service {0} registered, activate component", new Object[]
- { m_dependencyMetadata.getName() }, null );
-
- // immediately try to activate the component (FELIX-2368)
- m_componentManager.activateInternal();
+ added.remove( ref );
+ m_size.incrementAndGet();
}
}
- else if ( isMultiple() || !isReluctant())
+ if (process)
{
- // if dynamic and multiple reference, bind, otherwise ignore
- serviceAdded( ref );
+ if ( isStatic() )
+ {
+ // if static reference: activate if currentl unsatisifed, otherwise no influence
+ if ( m_componentManager.getState() == AbstractComponentManager.STATE_UNSATISFIED )
+ {
+ m_componentManager.log( LogService.LOG_DEBUG,
+ "Dependency Manager: Service {0} registered, activate component", new Object[]
+ { m_dependencyMetadata.getName() }, null );
+
+ // immediately try to activate the component (FELIX-2368)
+ m_componentManager.activateInternal();
+ }
+ }
+ else if ( isMultiple() || !isReluctant())
+ {
+ // if dynamic and multiple reference, bind, otherwise ignore
+ serviceAdded( ref );
+ }
}
+
}
}
else if ( !targetFilterMatch( ref ) )
{
- // service reference does not match target any more, remove
- m_size.decrementAndGet();
- serviceRemoved( ref );
+ synchronized ( removed )
+ {
+ removed.add( ref );
+ }
+ synchronized (enableLock)
+ {
+ //wait for enable to complete
+ }
+ boolean process;
+ synchronized ( removed )
+ {
+ if (process = removed.contains( ref ))
+ {
+ removed.remove( ref );
+ m_size.decrementAndGet();
+ }
+ }
+ if (process)
+ {
+ serviceRemoved( ref );
+ }
}
else
{