diff --git a/python/testSrc/com/jetbrains/env/python/debug/PyBaseDebuggerTask.java b/python/testSrc/com/jetbrains/env/python/debug/PyBaseDebuggerTask.java index 38eed736c7ef..496204c1a42b 100644 --- a/python/testSrc/com/jetbrains/env/python/debug/PyBaseDebuggerTask.java +++ b/python/testSrc/com/jetbrains/env/python/debug/PyBaseDebuggerTask.java @@ -1,9 +1,11 @@ package com.jetbrains.env.python.debug; import com.google.common.collect.Sets; +import com.intellij.execution.ExecutionResult; import com.intellij.openapi.application.Result; import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.JarFileSystem; @@ -37,6 +39,7 @@ public abstract class PyBaseDebuggerTask extends PyExecutionFixtureTestTask { protected Semaphore myTerminateSemaphore; protected boolean shouldPrintOutput = false; protected boolean myProcessCanTerminate; + protected ExecutionResult myExecutionResult; protected void waitForPause() throws InterruptedException, InvocationTargetException { Assert.assertTrue("Debugger didn't stopped within timeout\nOutput:" + output(), waitFor(myPausedSemaphore)); @@ -246,9 +249,8 @@ public abstract class PyBaseDebuggerTask extends PyExecutionFixtureTestTask { UIUtil.invokeAndWaitIfNeeded(new Runnable() { public void run() { try { - if (mySession != null) { - finishSession(); - } + finishSession(); + PyBaseDebuggerTask.super.tearDown(); } catch (Exception e) { @@ -271,10 +273,22 @@ public abstract class PyBaseDebuggerTask extends PyExecutionFixtureTestTask { waitFor(mySession.getDebugProcess().getProcessHandler()); //wait for process termination after session.stop() which is async XDebuggerTestUtil.disposeDebugSession(mySession); + mySession = null; myDebugProcess = null; myPausedSemaphore = null; } + + + if (myExecutionResult != null) { + UIUtil.invokeLaterIfNeeded(new Runnable() { + @Override + public void run() { + Disposer.dispose(myExecutionResult.getExecutionConsole()); + } + }); + myExecutionResult = null; + } } protected abstract void disposeDebugProcess() throws InterruptedException; diff --git a/python/testSrc/com/jetbrains/env/python/debug/PyDebuggerTask.java b/python/testSrc/com/jetbrains/env/python/debug/PyDebuggerTask.java index 78111bb9fa7c..f9da004ad3af 100644 --- a/python/testSrc/com/jetbrains/env/python/debug/PyDebuggerTask.java +++ b/python/testSrc/com/jetbrains/env/python/debug/PyDebuggerTask.java @@ -12,6 +12,7 @@ import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.openapi.application.Result; import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Key; import com.intellij.xdebugger.*; import com.jetbrains.python.debugger.PyDebugProcess; @@ -111,7 +112,7 @@ public class PyDebuggerTask extends PyBaseDebuggerTask { new WriteAction() { @Override protected void run(@NotNull Result result) throws Throwable { - final ExecutionResult res = + myExecutionResult = pyState.execute(executor, PyDebugRunner.createCommandLinePatchers(myFixture.getProject(), pyState, profile, serverLocalPort)); mySession = XDebuggerManager.getInstance(getProject()). @@ -119,7 +120,7 @@ public class PyDebuggerTask extends PyBaseDebuggerTask { @NotNull public XDebugProcess start(@NotNull final XDebugSession session) { myDebugProcess = - new PyDebugProcess(session, serverSocket, res.getExecutionConsole(), res.getProcessHandler(), isMultiprocessDebug()); + new PyDebugProcess(session, serverSocket, myExecutionResult.getExecutionConsole(), myExecutionResult.getProcessHandler(), isMultiprocessDebug()); myDebugProcess.getProcessHandler().addProcessListener(new ProcessAdapter() { @@ -142,7 +143,7 @@ public class PyDebuggerTask extends PyBaseDebuggerTask { return myDebugProcess; } }); - result.setResult(res); + result.setResult(myExecutionResult); } }.execute().getResultObject();