Author: djencks
Date: Mon Sep 16 07:39:32 2013
New Revision: 1523552
URL: http://svn.apache.org/r1523552
Log:
FELIX-4223 access m_activated more usually under a lock
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/ConfigurationComponentFactoryImpl.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=1523552&r1=1523551&r2=1523552&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
Mon Sep 16 07:39:32 2013
@@ -823,34 +823,32 @@ public abstract class AbstractComponentM
final void disposeInternal( int reason )
{
log( LogService.LOG_DEBUG, "Disposing component (reason: " + reason +
")", null );
- if ( m_activated )
- {
- doDeactivate( reason, true );
- }
+ doDeactivate( reason, true );
clear();
}
- void doDeactivate( int reason, boolean disable )
+ final void doDeactivate( int reason, boolean disable )
{
try
{
if ( !unregisterService() )
{
log( LogService.LOG_DEBUG, "Component deactivation occuring on
another thread", null );
- //another thread is deactivating.
- return;
}
obtainWriteLock( "AbstractComponentManager.State.doDeactivate.1" );
try
{
- m_activated = false;
- deleteComponent( reason );
- deactivateDependencyManagers();
- if ( disable )
+ if ( m_activated )
{
- disableDependencyManagers();
+ m_activated = false;
+ deleteComponent( reason );
+ deactivateDependencyManagers();
+ if ( disable )
+ {
+ disableDependencyManagers();
+ }
+ unsetDependenciesCollected();
}
- unsetDependenciesCollected();
}
finally
{
Modified:
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ConfigurationComponentFactoryImpl.java
URL:
http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ConfigurationComponentFactoryImpl.java?rev=1523552&r1=1523551&r2=1523552&view=diff
==============================================================================
---
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ConfigurationComponentFactoryImpl.java
(original)
+++
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ConfigurationComponentFactoryImpl.java
Mon Sep 16 07:39:32 2013
@@ -81,6 +81,7 @@ public class ConfigurationComponentFacto
((AbstractComponentManager)i.next()).enable( false );
}
+ m_activated = true;
return true;
}
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=1523552&r1=1523551&r2=1523552&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
Mon Sep 16 07:39:32 2013
@@ -572,6 +572,17 @@ public class ImmediateComponentManager<S
m_properties = null;
+ // reactivate the component to ensure it is provided with the
+ // configuration data
+ if ( ( getState() & ( STATE_DISPOSED | STATE_DISABLED ) ) != 0 )
+ {
+ // nothing to do for inactive components, leave this method
+ log( LogService.LOG_DEBUG, "Component can not be configured in
state {0}", new Object[] { getState() }, null );
+ //m_internalEnabled is false, we don't need to worry about
activation
+ updateTargets( getProperties() );
+ return;
+ }
+
//TODO wait for activation/deactivation to complete, then lock(?)
or internal disable...
// unsatisfied component and non-ignored configuration may change
targets
@@ -594,17 +605,6 @@ public class ImmediateComponentManager<S
return;
}
- // reactivate the component to ensure it is provided with the
- // configuration data
- if ( ( getState() & ( STATE_DISPOSED | STATE_DISABLED ) ) != 0 )
- {
- // nothing to do for inactive components, leave this method
- log( LogService.LOG_DEBUG, "Component can not be configured in
state {0}", new Object[] { getState() }, null );
- //m_internalEnabled is false, we don't need to worry about
activation
- updateTargets( getProperties() );
- return;
- }
-
// if the configuration has been deleted but configuration is
required
// this component must be deactivated
if ( configuration == null &&
getComponentMetadata().isConfigurationRequired() )