Fix ConcurrentModificationException during format conversion (#5045)

Regression from #4793

Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
This commit is contained in:
Holger Friedrich
2025-10-01 08:35:24 +02:00
committed by GitHub
parent a6a9a07691
commit cb5354ecd2
@@ -84,6 +84,7 @@ public class GenericMetadataProvider extends AbstractProvider<Metadata> implemen
try { try {
lock.writeLock().lock(); lock.writeLock().lock();
toBeNotified = new HashMap<>(); toBeNotified = new HashMap<>();
Set<String> modelsToRemove = new HashSet<>();
for (Map.Entry<String, Set<Metadata>> entry : metadata.entrySet()) { for (Map.Entry<String, Set<Metadata>> entry : metadata.entrySet()) {
String modelName = entry.getKey(); String modelName = entry.getKey();
Set<Metadata> mdSet = entry.getValue(); Set<Metadata> mdSet = entry.getValue();
@@ -91,12 +92,14 @@ public class GenericMetadataProvider extends AbstractProvider<Metadata> implemen
.collect(toSet()); .collect(toSet());
mdSet.removeAll(toBeRemoved); mdSet.removeAll(toBeRemoved);
if (mdSet.isEmpty()) { if (mdSet.isEmpty()) {
metadata.remove(modelName); modelsToRemove.add(modelName);
} }
if (!isIsolatedModel(modelName) && !toBeRemoved.isEmpty()) { if (!isIsolatedModel(modelName) && !toBeRemoved.isEmpty()) {
toBeNotified.put(modelName, toBeRemoved); toBeNotified.put(modelName, toBeRemoved);
} }
} }
// Remove empty model entries after iteration to avoid ConcurrentModificationException
modelsToRemove.forEach(metadata::remove);
} finally { } finally {
lock.writeLock().unlock(); lock.writeLock().unlock();
} }