From 2ada13db18c5a329c4dd4642d4d9a9d0c436f2cb Mon Sep 17 00:00:00 2001 From: Eugene Petrenko Date: Wed, 5 Aug 2020 11:47:52 +0200 Subject: [PATCH] shared-indexes: fix plugin unloading leak, cleanup dispose of SerializationManagerImpl, IDEA-247481 GitOrigin-RevId: 2668a3015b3c0b0759be8c9adef5791558d93441 --- .../com/intellij/psi/stubs/SerializationManagerImpl.java | 2 +- .../util/src/com/intellij/openapi/util/ShutDownTracker.java | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/platform/indexing-impl/src/com/intellij/psi/stubs/SerializationManagerImpl.java b/platform/indexing-impl/src/com/intellij/psi/stubs/SerializationManagerImpl.java index 1f617acf0767..c6cf13225f7c 100644 --- a/platform/indexing-impl/src/com/intellij/psi/stubs/SerializationManagerImpl.java +++ b/platform/indexing-impl/src/com/intellij/psi/stubs/SerializationManagerImpl.java @@ -55,7 +55,7 @@ public final class SerializationManagerImpl extends SerializationManagerEx imple nameStorageCrashed(); } finally { - ShutDownTracker.getInstance().registerShutdownTask(this::performShutdown); + ShutDownTracker.getInstance().registerShutdownTask(this::performShutdown, this); } StubElementTypeHolderEP.EP_NAME.addChangeListener(this::dropSerializerData, this); diff --git a/platform/util/src/com/intellij/openapi/util/ShutDownTracker.java b/platform/util/src/com/intellij/openapi/util/ShutDownTracker.java index ff34fc2d8c3d..52ab240805fc 100644 --- a/platform/util/src/com/intellij/openapi/util/ShutDownTracker.java +++ b/platform/util/src/com/intellij/openapi/util/ShutDownTracker.java @@ -1,6 +1,7 @@ // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.openapi.util; +import com.intellij.openapi.Disposable; import com.intellij.openapi.diagnostic.Logger; import org.jetbrains.annotations.NotNull; @@ -104,6 +105,11 @@ public final class ShutDownTracker implements Runnable { myThreads.remove(thread); } + public void registerShutdownTask(@NotNull Runnable task, @NotNull Disposable parentDisposable) { + registerShutdownTask(task); + Disposer.register(parentDisposable, () -> unregisterShutdownTask(task)); + } + public synchronized void registerShutdownTask(@NotNull Runnable task) { myShutdownTasks.addLast(task); }