This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit bfcf6b8c3a46504072bc0ce92ecbf193f6f10400 Author: Claus Ibsen <[email protected]> AuthorDate: Fri Jul 10 16:33:30 2026 +0200 TUI: Fix thread-safety for errors list and selectedPid/lastSelectedName - IntegrationInfo: Use CopyOnWriteArrayList for errors to prevent CME when background refresh does clear/addAll while render thread iterates - MonitorContext: Make selectedPid and lastSelectedName volatile so writes from the refresh thread are visible to the render thread Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Claus Ibsen <[email protected]> --- .../org/apache/camel/dsl/jbang/core/commands/tui/IntegrationInfo.java | 3 ++- .../org/apache/camel/dsl/jbang/core/commands/tui/MonitorContext.java | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/IntegrationInfo.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/IntegrationInfo.java index 93820acd05a8..97d973f097ec 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/IntegrationInfo.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/IntegrationInfo.java @@ -18,6 +18,7 @@ package org.apache.camel.dsl.jbang.core.commands.tui; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; class IntegrationInfo { String pid; @@ -84,7 +85,7 @@ class IntegrationInfo { final List<EndpointInfo> endpoints = new ArrayList<>(); final List<CircuitBreakerInfo> circuitBreakers = new ArrayList<>(); int errorCount; - final List<ErrorInfo> errors = new ArrayList<>(); + final List<ErrorInfo> errors = new CopyOnWriteArrayList<>(); boolean inflightBrowseEnabled; final List<InflightInfo> inflightExchanges = new ArrayList<>(); final List<MicrometerMeterInfo> meters = new ArrayList<>(); diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorContext.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorContext.java index 69eabda1770b..6bde687680f3 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorContext.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorContext.java @@ -32,8 +32,8 @@ class MonitorContext { final AtomicReference<List<InfraInfo>> infraData; TuiRunner runner; - String selectedPid; - String lastSelectedName; + volatile String selectedPid; + volatile String lastSelectedName; int shellPercent; boolean logPinned; int logPinPercent;
