From 8c253aec4db3450dc640c4b66f74f9c8908514fa Mon Sep 17 00:00:00 2001 From: Luck Date: Mon, 28 Aug 2023 17:39:21 +0100 Subject: Don't try to send statistics to a closed socket (#357) --- .../src/main/java/me/lucko/spark/common/sampler/AbstractSampler.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'spark-common/src/main/java/me/lucko/spark/common') diff --git a/spark-common/src/main/java/me/lucko/spark/common/sampler/AbstractSampler.java b/spark-common/src/main/java/me/lucko/spark/common/sampler/AbstractSampler.java index d814002..445702e 100644 --- a/spark-common/src/main/java/me/lucko/spark/common/sampler/AbstractSampler.java +++ b/spark-common/src/main/java/me/lucko/spark/common/sampler/AbstractSampler.java @@ -37,13 +37,13 @@ import me.lucko.spark.proto.SparkProtos; import me.lucko.spark.proto.SparkSamplerProtos.SamplerData; import me.lucko.spark.proto.SparkSamplerProtos.SamplerMetadata; -import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CopyOnWriteArrayList; /** * Base implementation class for {@link Sampler}s. @@ -78,7 +78,7 @@ public abstract class AbstractSampler implements Sampler { protected Map initialGcStats; /** A set of viewer sockets linked to the sampler */ - protected List viewerSockets = new ArrayList<>(); + protected List viewerSockets = new CopyOnWriteArrayList<>(); protected AbstractSampler(SparkPlatform platform, SamplerSettings settings) { this.platform = platform; @@ -156,6 +156,7 @@ public abstract class AbstractSampler implements Sampler { protected void sendStatisticsToSocket() { try { + this.viewerSockets.removeIf(socket -> !socket.isOpen()); if (this.viewerSockets.isEmpty()) { return; } -- cgit