protected void finishSession() throws InterruptedException { disposeDebugProcess(); if (mySession != null) { new WriteAction() { protected void run(Result result) throws Throwable { mySession.stop(); } }.execute(); waitFor( mySession .getDebugProcess() .getProcessHandler()); // wait for process termination after session.stop() which is // async XDebuggerTestUtil.disposeDebugSession(mySession); mySession = null; myDebugProcess = null; myPausedSemaphore = null; } final ExecutionResult result = myExecutionResult; if (myExecutionResult != null) { UIUtil.invokeLaterIfNeeded( new Runnable() { @Override public void run() { Disposer.dispose(result.getExecutionConsole()); } }); myExecutionResult = null; } }