From 64f0dc35bf0630ef78bc3ca686c0ff4db58e265f Mon Sep 17 00:00:00 2001 From: Egor Ushakov Date: Thu, 18 Sep 2025 18:22:41 +0200 Subject: [PATCH] [debugger] ensure node is obsolete on backend GitOrigin-RevId: 57f6cef040bc082c477d72f1f0e2d46ecebf4bd1 --- .../debugger/impl/backend/BackendXValueApi.kt | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/BackendXValueApi.kt b/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/BackendXValueApi.kt index 847b1cf59a95..90a46050b0f1 100644 --- a/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/BackendXValueApi.kt +++ b/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/BackendXValueApi.kt @@ -187,10 +187,11 @@ internal fun computeContainerChildren( } val addNextChildrenCallbackHandler = AddNextChildrenCallbackHandler(this@channelFlow) - var isObsolete = false val xCompositeBridgeNode = object : XCompositeNode { + @Volatile + var obsolete = false override fun isObsolete(): Boolean { - return isObsolete + return obsolete } override fun addChildren(children: XValueChildrenList, last: Boolean) { @@ -222,20 +223,18 @@ internal fun computeContainerChildren( } } - xValueContainer.computeChildren(xCompositeBridgeNode) - - // mark xCompositeBridgeNode as obsolete when the channel collection is canceled launch { - try { - awaitCancellation() - } - finally { - isObsolete = true + for (event in rawEvents) { + send(event.convertToRpcEvent(parentCs, session)) } } - for (event in rawEvents) { - send(event.convertToRpcEvent(parentCs, session)) + try { + xValueContainer.computeChildren(xCompositeBridgeNode) + awaitClose() + } + finally { + xCompositeBridgeNode.obsolete = true } } }