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