diff --git a/features/nrtg/nrtbroker-local/src/main/java/org/opennms/nrtg/nrtbroker/local/internal/NrtBrokerLocal.java b/features/nrtg/nrtbroker-local/src/main/java/org/opennms/nrtg/nrtbroker/local/internal/NrtBrokerLocal.java index 163b286..0ccb15c 100644 --- a/features/nrtg/nrtbroker-local/src/main/java/org/opennms/nrtg/nrtbroker/local/internal/NrtBrokerLocal.java +++ b/features/nrtg/nrtbroker-local/src/main/java/org/opennms/nrtg/nrtbroker/local/internal/NrtBrokerLocal.java @@ -34,6 +34,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import org.opennms.nrtg.api.NrtBroker; import org.opennms.nrtg.api.ProtocolCollector; @@ -83,15 +84,16 @@ public class NrtBrokerLocal implements NrtBroker, NrtBrokerLocalMBean { } private synchronized void doHousekeeping() { - for (final Iterator it = m_lastAccess.keySet().iterator(); it.hasNext();) { - final String key = it.next(); - final Date lastAccess = m_lastAccess.get(key); + final Iterator> it = m_lastAccess.entrySet().iterator(); + while (it.hasNext()) { + final Entry entry = it.next(); + final Date lastAccess = entry.getValue(); final Date now = new Date(); if (now.getTime() - lastAccess.getTime() > 120000) { - m_lastAccess.remove(key); - m_measurementSets.remove(key); + it.remove(); // removes entry from m_lastAccess to avoid ConcurrentModificationException + m_measurementSets.remove(entry.getKey()); - logger.warn("Timed out object removed '{}'", key); + logger.warn("Timed out object removed '{}'", entry.getKey()); } } }