diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/DebuggerManagerThreadImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/DebuggerManagerThreadImpl.java index 52f48bc28bf4..0d0a8de92f68 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/DebuggerManagerThreadImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/DebuggerManagerThreadImpl.java @@ -55,19 +55,6 @@ public class DebuggerManagerThreadImpl extends InvokeAndWaitThread future) { - try { - LOG.debug("Waiting for " + future); - future.get(1, TimeUnit.MINUTES); - } - catch (InterruptedException | ExecutionException e) { - throw new RuntimeException(e); - } - catch (TimeoutException e) { - throw new RuntimeException("Termination request is still pending", e); - } - } - @TestOnly public static DebuggerManagerThreadImpl createTestInstance(@NotNull Disposable parent, Project project) { return new DebuggerManagerThreadImpl(parent, project); @@ -147,11 +134,18 @@ public class DebuggerManagerThreadImpl extends InvokeAndWaitThread waitForTerminateFutureToComplete(future)); + Disposer.register(myProject, () -> { + if (!future.cancel(true)) { + WorkerThreadRequest request = getCurrentThreadRequest(); + if (request != null) { + request.requestStop(); + } + } + // else scheduled future was de-scheduled successfully before starting + }); } } - @Override public void processEvent(@NotNull DebuggerCommandImpl managerCommand) { assertIsManagerThread();