Skip to content

Race condition in ConsoleColorProvider.connect() #2638

@trancexpress

Description

@trancexpress

Seen in: #596

Reproduction steps are similar to: #2637

  1. Set a breakpoint at: org.eclipse.debug.ui.console.ConsoleColorProvider.connect(IProcess, IConsole)
  2. Debug Eclipse, make sure the Console view is open.
  3. In the debuggee, create a snippet:
public class Test3 {

	public static void main(String[] args) throws InterruptedException {
		Thread.sleep(60_000);
	}
}
  1. Launch this snippet twice.
  2. Observe two threads suspended at the breakpoint.
  3. Step over in the 1st thread until if (streamsProxy != null) {, do the same for the 2nd thread.
  4. Continue stepping until this state is reached:
"Worker-7: Creating console for /usr/lib/jvm/java-21-openjdk/bin/java (Apr 30, 2026, 11:56:11 AM) [pid: 70092]" #79 [69171] prio=5 os_prio=0 cpu=72.35ms elapsed=122.76s tid=0x00007fea50003e50 nid=69171 runnable  [0x00007feaecea0000]
   java.lang.Thread.State: RUNNABLE
        at org.eclipse.debug.internal.ui.views.console.ProcessConsole.connect(ProcessConsole.java:797)
        - locked <0x0000000720e4cde8> (a org.eclipse.debug.internal.core.OutputStreamMonitor)
        at org.eclipse.debug.internal.ui.views.console.ProcessConsole.connect(ProcessConsole.java:760)
        at org.eclipse.debug.ui.console.ConsoleColorProvider.connect(ConsoleColorProvider.java:43)
        at org.eclipse.debug.internal.ui.views.console.ProcessConsole.<init>(ProcessConsole.java:274)
        at org.eclipse.debug.internal.ui.views.console.ProcessConsoleManager$ConsoleCreation.run(ProcessConsoleManager.java:74)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
"Worker-10: Creating console for /usr/lib/jvm/java-21-openjdk/bin/java (Apr 30, 2026, 11:56:09 AM) [pid: 70044]" #82 [69174] prio=5 os_prio=0 cpu=41.39ms elapsed=122.75s tid=0x00007fea4c004610 nid=69174 runnable  [0x00007feaeca9e000]
   java.lang.Thread.State: RUNNABLE
        at org.eclipse.debug.internal.ui.views.console.ProcessConsole.connect(ProcessConsole.java:797)
        - locked <0x000000072376c7a8> (a org.eclipse.debug.internal.core.OutputStreamMonitor)
        at org.eclipse.debug.internal.ui.views.console.ProcessConsole.connect(ProcessConsole.java:760)
        at org.eclipse.debug.ui.console.ConsoleColorProvider.connect(ConsoleColorProvider.java:43)
        at org.eclipse.debug.internal.ui.views.console.ProcessConsole.<init>(ProcessConsole.java:274)
        at org.eclipse.debug.internal.ui.views.console.ProcessConsoleManager$ConsoleCreation.run(ProcessConsoleManager.java:74)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

Both threads are not at fStreamListeners.add(listener), on the same ArrayList fStreamListeners.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions