You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2014/03/12 21:05:57 UTC

svn commit: r1576875 - /felix/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistry.java

Author: gnodet
Date: Wed Mar 12 20:05:57 2014
New Revision: 1576875

URL: http://svn.apache.org/r1576875
Log:
[FELIX-4190] The framework should not hold any lock while calling ServiceFactory#unget
Make sure all references are cleaned

Modified:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistry.java

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistry.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistry.java?rev=1576875&r1=1576874&r2=1576875&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistry.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistry.java Wed Mar 12 20:05:57 2014
@@ -155,13 +155,21 @@ public class ServiceRegistry
         }
 
         // Now forcibly unget the service object for all stubborn clients.
-        Bundle[] clients = getUsingBundles(reg.getReference());
+        ServiceReference ref = reg.getReference();
+        Bundle[] clients = getUsingBundles(ref);
         for (int i = 0; (clients != null) && (i < clients.length); i++)
         {
             while (ungetService(clients[i], reg.getReference()))
                 ; // Keep removing until it is no longer possible
         }
+        // Invalidate registration
         ((ServiceRegistrationImpl) reg).invalidate();
+        // Bundles are allowed to get a reference while unregistering
+        for (int i = 0; (clients != null) && (i < clients.length); i++)
+        {
+            while (ungetService(clients[i], ref))
+                ; // Keep removing until it is no longer possible
+        }
     }
 
     /**