Author: amichai
Date: Fri Nov  8 11:16:23 2013
New Revision: 1539982

URL: http://svn.apache.org/r1539982
Log:
Fix PublishingEndpointListenerFactory service leak (never being unregistered)

Modified:
    
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/publish/PublishingEndpointListenerFactory.java

Modified: 
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/publish/PublishingEndpointListenerFactory.java
URL: 
http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/publish/PublishingEndpointListenerFactory.java?rev=1539982&r1=1539981&r2=1539982&view=diff
==============================================================================
--- 
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/publish/PublishingEndpointListenerFactory.java
 (original)
+++ 
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/publish/PublishingEndpointListenerFactory.java
 Fri Nov  8 11:16:23 2013
@@ -46,6 +46,7 @@ public class PublishingEndpointListenerF
     private final BundleContext bctx;
     private final ZooKeeper zk;
     private final List<PublishingEndpointListener> listeners = new 
ArrayList<PublishingEndpointListener>();
+    private ServiceRegistration serviceRegistration;
 
     public PublishingEndpointListenerFactory(ZooKeeper zk, BundleContext bctx) 
{
         this.bctx = bctx;
@@ -55,18 +56,18 @@ public class PublishingEndpointListenerF
     public PublishingEndpointListener getService(Bundle b, 
ServiceRegistration<PublishingEndpointListener> sr) {
         LOG.debug("new EndpointListener from factory");
         synchronized (listeners) {
-            PublishingEndpointListener epl = new 
PublishingEndpointListener(zk, bctx);
-            listeners.add(epl);
-            return epl;
+            PublishingEndpointListener pel = new 
PublishingEndpointListener(zk, bctx);
+            listeners.add(pel);
+            return pel;
         }
     }
 
     public void ungetService(Bundle b, 
ServiceRegistration<PublishingEndpointListener> sr, 
-                             PublishingEndpointListener service) {
+                             PublishingEndpointListener pel) {
         LOG.debug("remove EndpointListener");
         synchronized (listeners) {
-            if (listeners.remove(service)) {
-                ((PublishingEndpointListener)service).close();
+            if (listeners.remove(pel)) {
+                pel.close();
             }
         }
     }
@@ -77,13 +78,17 @@ public class PublishingEndpointListenerF
                   "(&(" + Constants.OBJECTCLASS + "=*)(" + 
RemoteConstants.ENDPOINT_FRAMEWORK_UUID
                   + "=" + Utils.getUUID(bctx) + "))");
         props.put(ZooKeeperDiscovery.DISCOVERY_ZOOKEEPER_ID, "true");
-        bctx.registerService(EndpointListener.class.getName(), this, props);
+        serviceRegistration = 
bctx.registerService(EndpointListener.class.getName(), this, props);
     }
 
     public synchronized void stop() {
+        if (serviceRegistration != null) {
+            serviceRegistration.unregister();
+            serviceRegistration = null;
+        }
         synchronized (listeners) {
-            for (PublishingEndpointListener epl : listeners) {
-                epl.close();
+            for (PublishingEndpointListener pel : listeners) {
+                pel.close();
             }
             listeners.clear();
         }


Reply via email to