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;
+ }
}
}
}