You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by am...@apache.org on 2013/11/08 12:16:23 UTC

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

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();
         }