From f600e084aab55ecb3d9772235736f15c2a3229af Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Mon, 5 Aug 2013 12:07:35 +0200 Subject: [PATCH] simplify fix "Avoid memory leak in case: myDone executed but myRejected still keep doWhenRejected listeners (and vice versa)" --- .../src/com/intellij/openapi/util/ActionCallback.java | 5 ++--- .../src/com/intellij/openapi/util/ExecutionCallback.java | 3 +++ 2 files changed, 5 insertions(+), 3 deletions(-) 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; }