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