diff --git a/platform/core-api/src/com/intellij/openapi/util/ActionCallback.java b/platform/core-api/src/com/intellij/openapi/util/ActionCallback.java index 3fa9af1b47c6..d38f21996717 100644 --- a/platform/core-api/src/com/intellij/openapi/util/ActionCallback.java +++ b/platform/core-api/src/com/intellij/openapi/util/ActionCallback.java @@ -63,6 +63,7 @@ public class ActionCallback implements Disposable { public void setDone() { if (myDone.setExecuted()) { + myRejected.clear(); Disposer.dispose(this); } } @@ -81,6 +82,7 @@ public class ActionCallback implements Disposable { public void setRejected() { if (myRejected.setExecuted()) { + myDone.clear(); Disposer.dispose(this); } } @@ -190,9 +192,6 @@ public class ActionCallback implements Disposable { @Override public void dispose() { - // avoid memory leak in case: myDone executed but myRejected still keep doWhenRejected listeners (and vice versa) - myDone.clear(); - myRejected.clear(); } @NotNull diff --git a/platform/core-api/src/com/intellij/openapi/util/ExecutionCallback.java b/platform/core-api/src/com/intellij/openapi/util/ExecutionCallback.java index 7dbc7f7ef5ea..40572e9f6a8e 100644 --- a/platform/core-api/src/com/intellij/openapi/util/ExecutionCallback.java +++ b/platform/core-api/src/com/intellij/openapi/util/ExecutionCallback.java @@ -100,6 +100,9 @@ class ExecutionCallback { toRun.run(); } + /** + * Avoid memory leak in case: myDone executed but myRejected still keep doWhenRejected listeners (and vice versa) + */ synchronized void clear() { myRunnables = null; }