From 283e345fbf2a5d8fbcb53dc0416dc02396fef493 Mon Sep 17 00:00:00 2001 From: Andrii Zinchenko Date: Wed, 25 Sep 2024 22:47:54 +0200 Subject: [PATCH] [eel] eelProcessUtils: fix awaitExecutionResult GitOrigin-RevId: dda515a0e193b8a30fd689f1e4bca937b9d2f431 --- .../eel/provider/utils/eelProcessUtils.kt | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/platform/eelProvider/src/com/intellij/platform/eel/provider/utils/eelProcessUtils.kt b/platform/eelProvider/src/com/intellij/platform/eel/provider/utils/eelProcessUtils.kt index 95c55a23ef60..3ac9ef880a44 100644 --- a/platform/eelProvider/src/com/intellij/platform/eel/provider/utils/eelProcessUtils.kt +++ b/platform/eelProvider/src/com/intellij/platform/eel/provider/utils/eelProcessUtils.kt @@ -5,7 +5,10 @@ import com.intellij.execution.processTools.ExecutionResult import com.intellij.platform.eel.* import com.intellij.util.io.computeDetached import kotlinx.coroutines.DelicateCoroutinesApi -import kotlinx.coroutines.async +import kotlinx.coroutines.channels.consumeEach +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.launch +import java.io.ByteArrayOutputStream import java.io.IOException /** @@ -38,10 +41,21 @@ fun EelExecApi.ExecuteProcessResult.unwrap() = when (this) { */ @OptIn(DelicateCoroutinesApi::class) suspend fun EelProcess.awaitExecutionResult() = computeDetached { - val stdOut = async { stdout.receive() } - val stdErr = async { stderr.receive() } + ByteArrayOutputStream().use { out -> + ByteArrayOutputStream().use { err -> + coroutineScope { + launch { + stdout.consumeEach(out::write) + } - ExecutionResult(exitCode.await(), stdOut.await(), stdErr.await()) + launch { + stderr.consumeEach(err::write) + } + } + + ExecutionResult(exitCode.await(), out.toByteArray(), err.toByteArray()) + } + } } /**