From 62a5c8f53d1e8450181d042522dcdd7bea5b4267 Mon Sep 17 00:00:00 2001 From: Lars Vogel Date: Tue, 7 Jul 2026 11:16:28 +0200 Subject: [PATCH] Fix concurrent connect in ConsoleColorProvider The default ConsoleColorProvider is shared across ConsoleCreation jobs that run in parallel. connect(IProcess, IConsole) stored both arguments in fields and then wired up via those fields, so concurrent calls could interleave and connect a console to another process' streams proxy. This led to an ArrayIndexOutOfBoundsException on the wrong console's stream listeners and to consoles not being connected. Wire up using the method arguments instead of the shared fields. Refs #2638 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../org/eclipse/debug/ui/console/ConsoleColorProvider.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/console/ConsoleColorProvider.java b/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/console/ConsoleColorProvider.java index f87d48838ea..654d199af7c 100644 --- a/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/console/ConsoleColorProvider.java +++ b/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/console/ConsoleColorProvider.java @@ -38,9 +38,11 @@ public class ConsoleColorProvider implements IConsoleColorProvider { public void connect(IProcess process, IConsole console) { fProcess = process; fConsole = console; - IStreamsProxy streamsProxy = fProcess.getStreamsProxy(); + // Wire up via the arguments, not the fields: a shared provider instance + // may be connected concurrently for different processes (issue #2638). + IStreamsProxy streamsProxy = process.getStreamsProxy(); if (streamsProxy != null) { - fConsole.connect(streamsProxy); + console.connect(streamsProxy); } }