From 6fd11e168ba6d8f90bb32b496479583b87e772e2 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Tue, 18 Apr 2017 14:32:48 +0300 Subject: [PATCH] avoid leaking DebugProcess on debug session end (with the tab still opened) pt.2 --- .../src/com/intellij/debugger/impl/DebuggerSession.java | 8 +++++--- .../com/intellij/debugger/impl/DebuggerStateManager.java | 6 +++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java index 0a47aa0a8269..3a3de3752626 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -403,8 +403,10 @@ public class DebuggerSession implements AbstractDebuggerSession { public void dispose() { getProcess().dispose(); Disposer.dispose(myUpdateAlarm); - DebuggerInvocationUtil.swingInvokeLater(getProject(), - () -> getContextManager().setState(SESSION_EMPTY_CONTEXT, State.DISPOSED, Event.DISPOSE, null)); + DebuggerInvocationUtil.swingInvokeLater(getProject(), () -> { + myContextManager.setState(SESSION_EMPTY_CONTEXT, State.DISPOSED, Event.DISPOSE, null); + myContextManager.dispose(); + }); } // ManagerCommands diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerStateManager.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerStateManager.java index 9e2fd3e2fcef..7522ee2d179e 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerStateManager.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerStateManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -46,4 +46,8 @@ public abstract class DebuggerStateManager { protected void fireStateChanged(@NotNull DebuggerContextImpl newContext, DebuggerSession.Event event) { myEventDispatcher.getMulticaster().changeEvent(newContext, event); } + + void dispose() { + myEventDispatcher.getListeners().clear(); + } }