diff --git a/platform/platform-impl/src/com/intellij/ide/startup/impl/StartupManagerImpl.kt b/platform/platform-impl/src/com/intellij/ide/startup/impl/StartupManagerImpl.kt index e0ab89a5c711..aef3abd8dc86 100644 --- a/platform/platform-impl/src/com/intellij/ide/startup/impl/StartupManagerImpl.kt +++ b/platform/platform-impl/src/com/intellij/ide/startup/impl/StartupManagerImpl.kt @@ -102,6 +102,8 @@ open class StartupManagerImpl(private val project: Project, private val coroutin private val lock = Any() private val initProjectStartupActivities = ArrayDeque() private val postStartupActivities = ArrayDeque() + @Volatile + private var freezePostStartupActivities = false @MagicConstant(intValues = [0, DUMB_AWARE_PASSED.toLong(), ALL_PASSED.toLong()]) @Volatile @@ -270,6 +272,7 @@ open class StartupManagerImpl(private val project: Project, private val coroutin } withContext(tracer.span("run post-startup dynamically registered activities")) { + freezePostStartupActivities = true runActivities(postStartupActivities) } postStartupActivitiesPassed = DUMB_AWARE_PASSED @@ -353,9 +356,9 @@ open class StartupManagerImpl(private val project: Project, private val coroutin override fun runAfterOpened(runnable: Runnable) { checkNonDefaultProject() - if (postStartupActivitiesPassed < DUMB_AWARE_PASSED) { + if (!freezePostStartupActivities) { synchronized(lock) { - if (postStartupActivitiesPassed < DUMB_AWARE_PASSED) { + if (!freezePostStartupActivities) { postStartupActivities.add(runnable) return } @@ -370,6 +373,7 @@ open class StartupManagerImpl(private val project: Project, private val coroutin synchronized(lock) { initProjectStartupActivities.clear() postStartupActivities.clear() + freezePostStartupActivities = false } }