From e60bd467ff73c04f416616376e8e93a29a3ae6b7 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Wed, 23 Jul 2014 11:00:04 +0200 Subject: [PATCH] java soft stop DEA-75946 Provide graceful "Exit" action during the debugging session --- .../src/com/intellij/debugger/impl/DebuggerManagerImpl.java | 4 +++- .../execution/application/ApplicationConfiguration.java | 3 ++- .../com/intellij/execution/impl/DefaultJavaProgramRunner.java | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java index f5404cd65023..79c1db31db3c 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java @@ -28,6 +28,7 @@ import com.intellij.execution.configurations.JavaParameters; import com.intellij.execution.configurations.ModuleRunProfile; import com.intellij.execution.configurations.RemoteConnection; import com.intellij.execution.configurations.RunProfileState; +import com.intellij.execution.process.KillableColoredProcessHandler; import com.intellij.execution.process.ProcessAdapter; import com.intellij.execution.process.ProcessEvent; import com.intellij.execution.process.ProcessHandler; @@ -286,7 +287,8 @@ public class DebuggerManagerImpl extends DebuggerManagerEx implements Persistent final DebugProcessImpl debugProcess = getDebugProcess(event.getProcessHandler()); if (debugProcess != null) { // if current thread is a "debugger manager thread", stop will execute synchronously - debugProcess.stop(willBeDestroyed); + // it is KillableColoredProcessHandler responsibility to terminate VM + debugProcess.stop(willBeDestroyed && !(event.getProcessHandler() instanceof KillableColoredProcessHandler)); // wait at most 10 seconds: the problem is that debugProcess.stop() can hang if there are troubles in the debuggee // if processWillTerminate() is called from AWT thread debugProcess.waitFor() will block it and the whole app will hang diff --git a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java index 2370ad3bda71..c4b2698e7868 100644 --- a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java +++ b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java @@ -21,6 +21,7 @@ import com.intellij.execution.configuration.EnvironmentVariablesComponent; import com.intellij.execution.configurations.*; import com.intellij.execution.filters.TextConsoleBuilderFactory; import com.intellij.execution.junit.RefactoringListeners; +import com.intellij.execution.process.KillableColoredProcessHandler; import com.intellij.execution.process.OSProcessHandler; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.util.JavaParametersUtil; @@ -285,7 +286,7 @@ public class ApplicationConfiguration extends ModuleBasedConfiguration