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() )


Reply via email to