From 34bdb37d8f2d8b8bb48b0c23587fc79327ef4d7b Mon Sep 17 00:00:00 2001 From: Michael Golubev Date: Thu, 8 Nov 2018 01:31:44 +0100 Subject: [PATCH] IDEA-158216 - Docker: unable to reopen Inspect window + leak fixed - log manager should forget disposed logs --- .../runtime/deployment/DeploymentLogManager.java | 2 ++ .../impl/runtime/log/DeploymentLogManagerImpl.java | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/platform/remote-servers/api/src/com/intellij/remoteServer/runtime/deployment/DeploymentLogManager.java b/platform/remote-servers/api/src/com/intellij/remoteServer/runtime/deployment/DeploymentLogManager.java index d69ef80dc1f4..a03f72096ff1 100644 --- a/platform/remote-servers/api/src/com/intellij/remoteServer/runtime/deployment/DeploymentLogManager.java +++ b/platform/remote-servers/api/src/com/intellij/remoteServer/runtime/deployment/DeploymentLogManager.java @@ -32,6 +32,8 @@ public interface DeploymentLogManager { @NotNull LoggingHandler addAdditionalLog(@NotNull String presentableName); + void removeAdditionalLog(@NotNull String presentableName); + boolean isTtySupported(); TerminalHandler addTerminal(@NotNull String presentableName, InputStream terminalOutput, OutputStream terminalInput); diff --git a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/log/DeploymentLogManagerImpl.java b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/log/DeploymentLogManagerImpl.java index 1881be0e2f8f..711c4e227ee1 100644 --- a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/log/DeploymentLogManagerImpl.java +++ b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/log/DeploymentLogManagerImpl.java @@ -79,6 +79,17 @@ public class DeploymentLogManagerImpl implements DeploymentLogManager { return handler; } + @Override + public void removeAdditionalLog(@NotNull String presentableName) { + synchronized (myAdditionalLoggingHandlers) { + myAdditionalLoggingHandlers.stream() + .filter(next -> presentableName.equals(next.getPresentableName())) + .findAny() + .ifPresent(myAdditionalLoggingHandlers::remove); + } + myChangeListener.run(); + } + @NotNull public LoggingHandler findOrCreateAdditionalLog(@NotNull String presentableName) { synchronized (myAdditionalLoggingHandlers) {