Fix race condition leading to project leak through extension point listener in StartupManagerImpl

GitOrigin-RevId: af3c3fd64ea2b8f12b10be7652d28c9f0ee9b072
This commit is contained in:
Dmitry Jemerov
2019-08-22 01:50:10 +03:00
committed by intellij-monorepo-bot
parent e4e2e3bb99
commit 5d5fb35f63
@@ -410,19 +410,21 @@ public class StartupManagerImpl extends StartupManagerEx implements Disposable {
}
public void scheduleBackgroundPostStartupActivities() {
List<StartupActivity> backgroundPostStartupActivities = StartupActivity.BACKGROUND_POST_STARTUP_ACTIVITY.getExtensionList();
Extensions.getRootArea().getExtensionPoint(StartupActivity.BACKGROUND_POST_STARTUP_ACTIVITY).addExtensionPointListener(
new ExtensionPointListener<StartupActivity>() {
@Override
public void extensionAdded(@NotNull StartupActivity extension, @NotNull PluginDescriptor pluginDescriptor) {
extension.runActivity(myProject);
}
}, false, this);
myBackgroundPostStartupScheduledFuture = AppExecutorUtil.getAppScheduledExecutorService().schedule(
() -> BackgroundTaskUtil.runUnderDisposeAwareIndicator(this, () -> {
for (StartupActivity activity : StartupActivity.BACKGROUND_POST_STARTUP_ACTIVITY.getExtensionList()) {
for (StartupActivity activity : backgroundPostStartupActivities) {
activity.runActivity(myProject);
}
Extensions.getRootArea().getExtensionPoint(StartupActivity.BACKGROUND_POST_STARTUP_ACTIVITY).addExtensionPointListener(
new ExtensionPointListener<StartupActivity>() {
@Override
public void extensionAdded(@NotNull StartupActivity extension, @NotNull PluginDescriptor pluginDescriptor) {
extension.runActivity(myProject);
}
}, false, this);
}), 5, TimeUnit.SECONDS);
}