Author: fmeschbe
Date: Tue Nov 27 13:13:12 2012
New Revision: 1414168
URL: http://svn.apache.org/viewvc?rev=1414168&view=rev
Log:
FELIX-3787 Test dependencies map against null to prevent NPE on service update
of inactive delayed components
Modified:
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
Modified:
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
URL:
http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java?rev=1414168&r1=1414167&r2=1414168&view=diff
==============================================================================
---
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
(original)
+++
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
Tue Nov 27 13:13:12 2012
@@ -380,14 +380,18 @@ public class DependencyManager implement
}
else
{
- Map bound = ( Map )
m_componentManager.getDependencyMap().get( this );
- if ( m_dependencyMetadata.isMultiple() ||
- bound.isEmpty() ||
- reference.compareTo(
bound.keySet().iterator().next() ) > 0 )
- {
- m_componentManager.deactivateInternal(
ComponentConstants.DEACTIVATION_REASON_REFERENCE, false );
- m_componentManager.activateInternal();
- }
+ Map dependenciesMap =
m_componentManager.getDependencyMap();
+ if ( dependenciesMap != null )
+ {
+ Map bound = ( Map ) dependenciesMap.get( this );
+ if ( m_dependencyMetadata.isMultiple() ||
+ bound.isEmpty() ||
+ reference.compareTo(
bound.keySet().iterator().next() ) > 0 )
+ {
+
m_componentManager.deactivateInternal(
ComponentConstants.DEACTIVATION_REASON_REFERENCE, false );
+
m_componentManager.activateInternal();
+ }
+ }
}
}
@@ -404,12 +408,16 @@ public class DependencyManager implement
else if ( !isReluctant() )
{
//dynamic greedy single: bind then unbind
- Map bound = ( Map )
m_componentManager.getDependencyMap().get( this );
- ServiceReference oldRef = ( ServiceReference )
bound.keySet().iterator().next();
- if ( reference.compareTo( oldRef ) > 0 )
+ Map dependenciesMap =
m_componentManager.getDependencyMap();
+ if ( dependenciesMap != null )
{
- m_componentManager.invokeBindMethod( this, reference );
- m_componentManager.invokeUnbindMethod( this, oldRef );
+ Map bound = ( Map ) dependenciesMap.get( this );
+ ServiceReference oldRef = ( ServiceReference )
bound.keySet().iterator().next();
+ if ( reference.compareTo( oldRef ) > 0 )
+ {
+ m_componentManager.invokeBindMethod( this,
reference );
+ m_componentManager.invokeUnbindMethod( this,
oldRef );
+ }
}
}
}