You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by fm...@apache.org on 2009/10/11 20:41:29 UTC

svn commit: r824123 - /felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ConfiguredComponentHolder.java

Author: fmeschbe
Date: Sun Oct 11 18:41:29 2009
New Revision: 824123

URL: http://svn.apache.org/viewvc?rev=824123&view=rev
Log:
FELIX-1733 Prevent recreation of dead components when the components
of a ConfiguredComponentHolder have to be disposed off

Modified:
    felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ConfiguredComponentHolder.java

Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ConfiguredComponentHolder.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ConfiguredComponentHolder.java?rev=824123&r1=824122&r2=824123&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ConfiguredComponentHolder.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ConfiguredComponentHolder.java Sun Oct 11 18:41:29 2009
@@ -264,10 +264,15 @@
 
     public void disposeComponents( final int reason )
     {
+        // FELIX-1733: get a copy of the single component and clear
+        // the field to prevent recreation in disposed(ICM)
+        final ImmediateComponentManager singleComponent = m_singleComponent;
+        m_singleComponent = null;
+
         final ImmediateComponentManager[] cms = getComponentManagers( true );
         if ( cms == null )
         {
-            m_singleComponent.dispose( reason );
+            singleComponent.dispose( reason );
         }
         else
         {
@@ -284,12 +289,15 @@
         // ensure the component is removed from the components map
         synchronized ( m_components )
         {
-            for ( Iterator vi = m_components.values().iterator(); vi.hasNext(); )
+            if ( !m_components.isEmpty() )
             {
-                if ( component == vi.next() )
+                for ( Iterator vi = m_components.values().iterator(); vi.hasNext(); )
                 {
-                    vi.remove();
-                    break;
+                    if ( component == vi.next() )
+                    {
+                        vi.remove();
+                        break;
+                    }
                 }
             }
         }