diff --git a/src/main/java/io/github/dsheirer/module/decode/p25/P25TrafficChannelManager.java b/src/main/java/io/github/dsheirer/module/decode/p25/P25TrafficChannelManager.java index 3406e71ea..6fd999baa 100644 --- a/src/main/java/io/github/dsheirer/module/decode/p25/P25TrafficChannelManager.java +++ b/src/main/java/io/github/dsheirer/module/decode/p25/P25TrafficChannelManager.java @@ -70,7 +70,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.LinkedTransferQueue; import java.util.concurrent.locks.ReentrantLock; -import java.util.function.BiConsumer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -171,23 +170,21 @@ protected void processControlFrequencyUpdate(long previous, long current, Channe try { //Shutdown all existing traffic channels and clear the maps. - mAllocatedTrafficChannelMap.forEach(new BiConsumer() + List trafficChannelsToDisable = new ArrayList<>(mAllocatedTrafficChannelMap.values()); + mAllocatedTrafficChannelMap.clear(); + + for(Channel channel : trafficChannelsToDisable) { - @Override - public void accept(Long aLong, Channel channel) + if(!parentChannel.equals(channel)) { - if(!parentChannel.equals(channel)) - { - broadcast(new ChannelEvent(channel, Event.REQUEST_DISABLE)); - } + broadcast(new ChannelEvent(channel, Event.REQUEST_DISABLE)); } - }); + } - mAllocatedTrafficChannelMap.clear(); mTS1ChannelGrantEventMap.clear(); mTS2ChannelGrantEventMap.clear(); - //Store the control channel in the allocated channel map so that we don't allocate a traffic channel against it + //Store the current control channel in the allocated channel map so that we don't allocate a traffic channel against it mAllocatedTrafficChannelMap.put(current, parentChannel); } finally