mirror of
https://github.com/danieldemus/openhab-core.git
synced 2026-07-29 12:34:22 +02:00
Fix ConcurrentModificationException during format conversion (#5045)
Regression from #4793 Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
This commit is contained in:
+4
-1
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user