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

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


The following commit(s) were added to refs/heads/master by this push:
     new d3fc2043 ARIES-2230 Fix Race condition in TopologyManagerImpor 
handling of endpoint events
d3fc2043 is described below

commit d3fc2043068fad94b2c2f9dbb14ab2ead9481eca
Author: Amichai Rothman <[email protected]>
AuthorDate: Sat May 30 12:04:18 2026 +0300

    ARIES-2230 Fix Race condition in TopologyManagerImpor handling of endpoint 
events
---
 .../rsa/topologymanager/importer/TopologyManagerImport.java  | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 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 fa7c1d78..42b6523f 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
@@ -21,6 +21,7 @@ package org.apache.aries.rsa.topologymanager.importer;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
@@ -110,9 +111,12 @@ public class TopologyManagerImport implements 
EndpointEventListener, RemoteServi
     public void remoteAdminEvent(RemoteServiceAdminEvent event) {
         ImportReference ref = event.getImportReference();
         if (event.getType() == RemoteServiceAdminEvent.IMPORT_UNREGISTRATION 
&& ref != null) {
-            importedServices.allValues().stream()
-                .filter(reg -> ref.equals(reg.getImportReference()))
-                .forEach(this::unimportRegistration);
+            synchronized (this) {
+                List<ImportRegistration> closing = 
importedServices.allValues().stream()
+                    .filter(reg -> ref.equals(reg.getImportReference()))
+                    .collect(Collectors.toList()); // make a copy to prevent 
CME
+                closing.forEach(this::unimportRegistration);
+            }
         }
     }
 
@@ -133,7 +137,7 @@ public class TopologyManagerImport implements 
EndpointEventListener, RemoteServi
      *
      * @param filter the filter whose endpoints are synchronized
      */
-    private void synchronizeImports(final String filter) {
+    private synchronized void synchronizeImports(final String filter) {
         try {
             // we have a set of all current imports, and a set of all possible 
imports (with overlap)
             Set<ImportRegistration> imported = importedServices.get(filter);

Reply via email to