diff --git a/core/pva/src/main/java/org/epics/pva/client/ChannelSearch.java b/core/pva/src/main/java/org/epics/pva/client/ChannelSearch.java index 35ee2ba03b..7d434e69ce 100644 --- a/core/pva/src/main/java/org/epics/pva/client/ChannelSearch.java +++ b/core/pva/src/main/java/org/epics/pva/client/ChannelSearch.java @@ -342,17 +342,13 @@ public synchronized void boost() } } - /** List of channels to search, re-used within runSearches */ - private final ArrayList to_search = new ArrayList<>(); - /** Invoked by timer: Check searched channels for the next one to handle */ - @SuppressWarnings("unchecked") private void runSearches() { // Determine current search bucket final int current = current_search_bucket.getAndUpdate(i -> (i + 1) % search_buckets.size()); // Collect channels to be searched while sync'ed - to_search.clear(); + final ArrayList to_search = new ArrayList<>(); synchronized (this) { final Set bucket = search_buckets.get(current); @@ -406,7 +402,7 @@ private void runSearches() int count = 0; while (start + count < to_search.size() && count < Short.MAX_VALUE-1) { - final PVAChannel channel = to_search.get(start + count); + final SearchRequest.Channel channel = to_search.get(start + count); int size = 4 + PVAString.getEncodedSize(channel.getName()); if (payload + size < MAX_SEARCH_PAYLOAD) { @@ -428,9 +424,9 @@ else if (count == 0) if (count == 0) break; - final List batch = to_search.subList(start, start + count); - // PVAChannel extends SearchRequest.Channel, so use List as Collection - search((Collection) (List)batch); + // Submit one batch from 'to_search' + final List batch = to_search.subList(start, start + count); + search(batch); start += count; } }