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

Reply via email to