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 2013/04/12 18:55:41 UTC
svn commit: r1467353 - in
/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager:
AbstractComponentManager.java ComponentContextImpl.java
ImmediateComponentManager.java
Author: djencks
Date: Fri Apr 12 16:55:41 2013
New Revision: 1467353
URL: http://svn.apache.org/r1467353
Log:
FELIX-4011 getService can wait if another thread is creating the impl object
Modified:
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java?rev=1467353&r1=1467352&r2=1467353&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java Fri Apr 12 16:55:41 2013
@@ -191,7 +191,7 @@ public abstract class AbstractComponentM
}
}
- private long getLockTimeout()
+ long getLockTimeout()
{
BundleComponentActivator activator = getActivator();
if ( activator != null )
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java?rev=1467353&r1=1467352&r2=1467353&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java Fri Apr 12 16:55:41 2013
@@ -21,6 +21,8 @@ package org.apache.felix.scr.impl.manage
import java.util.Arrays;
import java.util.Dictionary;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
import org.apache.felix.scr.component.ExtComponentContext;
import org.apache.felix.scr.impl.BundleComponentActivator;
@@ -48,6 +50,8 @@ public class ComponentContextImpl<S> imp
private final S m_implementationObject;
private volatile boolean m_implementationAccessible;
+
+ private final CountDownLatch accessibleLatch = new CountDownLatch(1);
ComponentContextImpl( AbstractComponentManager<S> componentManager, Bundle usingBundle, S implementationObject )
{
@@ -60,6 +64,10 @@ public class ComponentContextImpl<S> imp
void setImplementationAccessible(boolean implementationAccessible)
{
this.m_implementationAccessible = implementationAccessible;
+ if (implementationAccessible)
+ {
+ accessibleLatch.countDown();
+ }
}
EdgeInfo getEdgeInfo(DependencyManager<S, ?> dm)
@@ -170,6 +178,17 @@ public class ComponentContextImpl<S> imp
{
return m_implementationObject;
}
+ try
+ {
+ if (accessibleLatch.await( m_componentManager.getLockTimeout(), TimeUnit.MILLISECONDS ) && m_implementationAccessible)
+ {
+ return m_implementationObject;
+ }
+ }
+ catch ( InterruptedException e )
+ {
+ return null;
+ }
return null;
}
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java?rev=1467353&r1=1467352&r2=1467353&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java Fri Apr 12 16:55:41 2013
@@ -700,8 +700,7 @@ public class ImmediateComponentManager<S
public S getService( Bundle bundle, ServiceRegistration<S> serviceRegistration )
{
- ComponentContextImpl<S> componentContext = m_componentContext;
- if ( componentContext == null )
+ if ( m_componentContext == null )
{
try
{