This is an automated email from the ASF dual-hosted git repository.

amichai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/aries-rsa.git

commit e5cf123780712cc28e39fbefa61cab2c95db2c36
Author: Amichai Rothman <[email protected]>
AuthorDate: Tue Mar 17 16:50:16 2026 +0200

    Fix TopologyManagerImport not unregistering listener when stopped
---
 .../aries/rsa/topologymanager/importer/TopologyManagerImport.java  | 7 ++++++-
 .../rsa/topologymanager/importer/TopologyManagerImportTest.java    | 3 ++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git 
a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
 
b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
index d962a816..e48ef198 100644
--- 
a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
+++ 
b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
@@ -28,6 +28,7 @@ import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.remoteserviceadmin.EndpointDescription;
 import org.osgi.service.remoteserviceadmin.EndpointEvent;
 import org.osgi.service.remoteserviceadmin.EndpointEventListener;
@@ -51,6 +52,7 @@ public class TopologyManagerImport implements 
EndpointEventListener, RemoteServi
     private final ExecutorService execService;
     private final BundleContext bctx;
     private final Set<RemoteServiceAdmin> rsaSet;
+    private ServiceRegistration<RemoteServiceAdminListener> 
rsaListenerRegistration;
     private volatile boolean stopped;
 
     /**
@@ -71,11 +73,14 @@ public class TopologyManagerImport implements 
EndpointEventListener, RemoteServi
 
     public void start() {
         stopped = false;
-        bctx.registerService(RemoteServiceAdminListener.class, this, null);
+        rsaListenerRegistration = 
bctx.registerService(RemoteServiceAdminListener.class, this, null);
     }
 
     public void stop() {
         stopped = true;
+        if (rsaListenerRegistration != null) {
+            rsaListenerRegistration.unregister();
+        }
         execService.shutdown();
         try {
             execService.awaitTermination(10, TimeUnit.SECONDS);
diff --git 
a/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java
 
b/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java
index 621c2b63..857729a9 100644
--- 
a/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java
+++ 
b/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java
@@ -44,10 +44,11 @@ public class TopologyManagerImportTest {
     @SuppressWarnings({ "rawtypes", "unchecked" })
     private BundleContext mockBundleContext(IMocksControl c) {
         ServiceRegistration sreg = c.createMock(ServiceRegistration.class);
+        sreg.unregister();
         BundleContext bc = c.createMock(BundleContext.class);
         expect(bc.registerService(eq(RemoteServiceAdminListener.class),
                 anyObject(RemoteServiceAdminListener.class),
-                anyObject())).andReturn(sreg).anyTimes();
+                anyObject())).andReturn(sreg).once();
         return bc;
     }
 

Reply via email to