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 424ab659f64c03e1fb1300958ce02c80fcfac647 Author: Amichai Rothman <[email protected]> AuthorDate: Sun Mar 15 12:57:43 2026 +0200 Fix ServiceExportsRepository retaining services with no exports --- .../rsa/topologymanager/exporter/ServiceExportsRepository.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/ServiceExportsRepository.java b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/ServiceExportsRepository.java index 2840c397..5373cb78 100644 --- a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/ServiceExportsRepository.java +++ b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/ServiceExportsRepository.java @@ -91,20 +91,22 @@ public class ServiceExportsRepository implements Closeable { @Override public synchronized void close() { LOG.debug("Closing registry for RemoteServiceAdmin {}", rsa.getClass().getName()); - for (ServiceReference<?> sref : exportsMap.keySet()) { + for (ServiceReference<?> sref : new ArrayList<>(exportsMap.keySet())) { // iterate over copy to avoid CME removeService(sref); } } public synchronized void addService(ServiceReference<?> sref, Collection<ExportRegistration> registrations) { Collection<ExportRegistrationHolder> exports = new ArrayList<>(registrations.size()); - exportsMap.put(sref, exports); for (ExportRegistration reg : registrations) { ExportReference reference = reg.getExportReference(); if (reference != null) { exports.add(new ExportRegistrationHolder(reg, reference.getExportedEndpoint())); } } + if (!exports.isEmpty()) { + exportsMap.put(sref, exports); + } } public synchronized void modifyService(ServiceReference<?> sref) { @@ -117,12 +119,11 @@ public class ServiceExportsRepository implements Closeable { } public synchronized void removeService(ServiceReference<?> sref) { - Collection<ExportRegistrationHolder> exports = exportsMap.get(sref); + Collection<ExportRegistrationHolder> exports = exportsMap.remove(sref); if (exports != null) { for (ExportRegistrationHolder reg : exports) { reg.close(); } - exports.clear(); } }
