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 2010/03/25 14:30:26 UTC

svn commit: r927394 - /felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java

Author: fmeschbe
Date: Thu Mar 25 13:30:26 2010
New Revision: 927394

URL: http://svn.apache.org/viewvc?rev=927394&view=rev
Log:
FELIX-2231 Prevent NullPointerException and uncaught IllegalStateException if bundle has been stopped while the component is being started

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=927394&r1=927393&r2=927394&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 Thu Mar 25 13:30:26 2010
@@ -29,6 +29,7 @@ import java.util.Map;
 
 import org.apache.felix.scr.Component;
 import org.apache.felix.scr.Reference;
+import org.apache.felix.scr.impl.BundleComponentActivator;
 import org.apache.felix.scr.impl.helper.BindMethod;
 import org.apache.felix.scr.impl.helper.UnbindMethod;
 import org.apache.felix.scr.impl.helper.UpdatedMethod;
@@ -570,11 +571,29 @@ public class DependencyManager implement
     {
         if ( hasGetPermission() )
         {
+            // component activator may be null if disposed concurrently
+            BundleComponentActivator bca = m_componentManager.getActivator();
+            if ( bca == null )
+            {
+                return null;
+            }
+
+            // get bundle context, may be null if component deactivated since getting bca
+            BundleContext bc = bca.getBundleContext();
+            if ( bc == null )
+            {
+                return null;
+            }
+
             try
             {
-                return m_componentManager.getActivator().getBundleContext().getServiceReferences(
+                return bc.getServiceReferences(
                     m_dependencyMetadata.getInterface(), targetFilter );
             }
+            catch ( IllegalStateException ise )
+            {
+                // bundle context is not valid any longer, cannot log
+            }
             catch ( InvalidSyntaxException ise )
             {
                 m_componentManager.log( LogService.LOG_ERROR, "Unexpected problem with filter ''{0}''", new Object[]