Commit ad4f8a28 authored by Vladimir Krivosheev's avatar Vladimir Krivosheev Committed by intellij-monorepo-bot
Browse files

IDEA-316300 Deadlock on IDEA startup via...

IDEA-316300 Deadlock on IDEA startup via `DeferredIconImpl>IDEKotlinAsJavaSupport>KotlinFacetSettingsProviderImpl>BaseComponentAdapter.getInstance`

GitOrigin-RevId: 535a41725b2222085ea03b9ab9fa5813fbd47f02
parent 46e893a4
Branches unavailable Tags unavailable
No related merge requests found
Showing with 14 additions and 2 deletions
+14 -2
......@@ -195,7 +195,7 @@ class DeferredIconImpl<T> : JBScalableIcon, DeferredIcon, RetrievableIcon, IconW
val oldWidth = scaledDelegateIcon.iconWidth
val result = IconDeferrerImpl.evaluateDeferred {
if (isNeedReadAction) {
runReadAction { evaluate() }
readAction { evaluate() }
}
else {
evaluate()
......
......@@ -23,7 +23,7 @@ internal class IconDeferrerImpl private constructor() : IconDeferrer() {
companion object {
private val isEvaluationInProgress = ThreadLocal.withInitial { false }
suspend inline fun <T> evaluateDeferred(crossinline runnable: () -> T): T {
suspend inline fun <T> evaluateDeferred(crossinline runnable: suspend () -> T): T {
try {
isEvaluationInProgress.set(true)
return withContext(isEvaluationInProgress.asContextElement()) {
......
......@@ -5,7 +5,13 @@ import com.intellij.openapi.command.CommandProcessor
import com.intellij.openapi.util.Computable
import com.intellij.util.concurrency.annotations.RequiresBlockingContext
import org.jetbrains.annotations.ApiStatus.Internal
import org.jetbrains.annotations.ApiStatus.Obsolete
/**
* Use [writeAction].
*/
@Obsolete
@RequiresBlockingContext
fun <T> runWriteAction(runnable: () -> T): T {
return ApplicationManager.getApplication().runWriteAction(Computable(runnable))
}
......@@ -16,6 +22,11 @@ fun <T> runUndoTransparentWriteAction(runnable: () -> T): T {
}
}
/**
* Use [readAction].
*/
@Obsolete
@RequiresBlockingContext
fun <T> runReadAction(runnable: () -> T): T {
return ApplicationManager.getApplication().runReadAction(Computable(runnable))
}
......@@ -46,6 +57,7 @@ fun <T> invokeAndWaitIfNeeded(modalityState: ModalityState? = null, runnable: ()
}
}
@RequiresBlockingContext
fun runInEdt(modalityState: ModalityState? = null, runnable: () -> Unit) {
val app = ApplicationManager.getApplication()
if (app.isDispatchThread) {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment