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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions