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/09/16 09:39:33 UTC

svn commit: r1523552 - in /felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager: AbstractComponentManager.java ConfigurationComponentFactoryImpl.java ImmediateComponentManager.java

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