Skip to content

Deadlock on terminating launch #2460

@trancexpress

Description

@trancexpress

While checking things for #2283, I wanted to terminate a launch before it was done.

That lead to a deadlock:

deadlock.txt

"main" #1 [129185] prio=6 os_prio=0 cpu=24055.55ms elapsed=290.14s tid=0x00007fc5cc01bb70 nid=129185 waiting for monitor entry  [0x00007fc5d2dfd000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.eclipse.debug.internal.ui.views.console.ProcessConsole.resetName(ProcessConsole.java:648)
        - waiting to lock <0x00000007ff1777a0> (a org.eclipse.debug.internal.ui.views.console.ProcessConsole)
        at org.eclipse.debug.internal.ui.views.console.ProcessConsole.lambda$1(ProcessConsole.java:354)
        at org.eclipse.debug.internal.ui.views.console.ProcessConsole$$Lambda/0x00007fc554c88750.run(Unknown Source)
        at org.eclipse.swt.widgets.Display.timerProc(Display.java:5721)
        at org.eclipse.swt.internal.gtk3.GTK3.gtk_main_iteration_do(Native Method)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4494)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1051)
        at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
        at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:684)
        at org.eclipse.ui.internal.Workbench$$Lambda/0x00007fc554235c98.run(Unknown Source)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:583)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:173)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:185)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:219)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:149)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:115)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:467)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:298)
        at java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(java.base@21.0.10/DirectMethodHandle$Holder)
        at java.lang.invoke.LambdaForm$MH/0x00007fc554016800.invoke(java.base@21.0.10/LambdaForm$MH)
        at java.lang.invoke.LambdaForm$MH/0x00007fc554016c00.invokeExact_MT(java.base@21.0.10/LambdaForm$MH)
        at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21.0.10/DirectMethodHandleAccessor.java:155)
        at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21.0.10/DirectMethodHandleAccessor.java:103)
        at java.lang.reflect.Method.invoke(java.base@21.0.10/Method.java:580)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:615)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:563)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1415)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1387)
"Worker-12: Debug Event Dispatch" #91 [132662] prio=5 os_prio=0 cpu=258.34ms elapsed=130.78s tid=0x00007fc3e0003c30 nid=132662 waiting for monitor entry  [0x00007fc51422d000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.eclipse.debug.internal.ui.views.console.ProcessConsole$StreamListener.closeStream(ProcessConsole.java:861)
        - waiting to lock <0x00000007ff19fa90> (a org.eclipse.debug.internal.core.OutputStreamMonitor)
        at org.eclipse.debug.internal.ui.views.console.ProcessConsole.closeStreams(ProcessConsole.java:549)
        - locked <0x00000007ff1777a0> (a org.eclipse.debug.internal.ui.views.console.ProcessConsole)
        at org.eclipse.debug.internal.ui.views.console.ProcessConsole.handleDebugEvents(ProcessConsole.java:635)
        at org.eclipse.debug.core.DebugPlugin$EventNotifier.run(DebugPlugin.java:1422)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
        at org.eclipse.debug.core.DebugPlugin$EventNotifier.dispatch(DebugPlugin.java:1456)
        at org.eclipse.debug.core.DebugPlugin$EventDispatchJob.run(DebugPlugin.java:521)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63
"Output Stream Monitor for PID 133081 TestConsoleHang" #96 [133090] daemon prio=1 os_prio=0 cpu=553.52ms elapsed=113.65s tid=0x00007fc420031cd0 nid=133090 waiting on condition  [0x00007fc42b1fb000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@21.0.10/Native Method)
        - parking to wait for  <0x00000007ff19f960> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.10/LockSupport.java:269)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.10/AbstractQueuedSynchronizer.java:1797)
        at java.util.concurrent.LinkedBlockingQueue.offer(java.base@21.0.10/LinkedBlockingQueue.java:378)
        at org.eclipse.ui.internal.console.IOConsolePartitioner.offer(IOConsolePartitioner.java:712)
        at org.eclipse.ui.internal.console.IOConsolePartitioner.streamAppended(IOConsolePartitioner.java:695)
        at org.eclipse.ui.console.IOConsoleOutputStream.notifyParitioner(IOConsoleOutputStream.java:281)
        at org.eclipse.ui.console.IOConsoleOutputStream.encodedWrite(IOConsoleOutputStream.java:276)
        - locked <0x00000007ff19fa10> (a org.eclipse.ui.console.IOConsoleOutputStream)
        at org.eclipse.ui.console.IOConsoleOutputStream.write(IOConsoleOutputStream.java:260)
        at org.eclipse.debug.internal.ui.views.console.ProcessConsole$StreamListener.streamAppended(ProcessConsole.java:841)
        at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:157)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
        at org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:154)
        at org.eclipse.debug.internal.core.OutputStreamMonitor.internalRead(OutputStreamMonitor.java:242)
        - locked <0x00000007ff19fa90> (a org.eclipse.debug.internal.core.OutputStreamMonitor)
        at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:211)
        at org.eclipse.debug.internal.core.OutputStreamMonitor$$Lambda/0x00007fc554c29568.run(Unknown Source)
        at java.lang.Thread.runWith(java.base@21.0.10/Thread.java:1596)
        at java.lang.Thread.run(java.base@21.0.10/Thread.java:1583)

Snippet is:

public class TestConsoleHang {
    public static void main(String[] args) {
        int N = 1_000_000;
        int M = 100;
        byte[] b = new byte[N];
        for (int i = 0; i < N; ++i) {
            b[i] = (byte) (49 + (i % 9));
        }
        String s = new String(b);
        for (int i = 0; i < M; ++i) {
            System.out.println(s);
        }
    }
}

I ran this, clicked on the terminate button in the Console view and Eclipse hanged.

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