From c099be5f18de53b387b64e7283bb9a3540e291ad Mon Sep 17 00:00:00 2001 From: calm <148254234+calm329@users.noreply.github.com> Date: Wed, 21 Jan 2026 21:49:41 -0800 Subject: [PATCH] [2.x] fix: Race condition in WorkerExchangeTest.propBye (#8606) --- .../src/test/scala/sbt/internal/WorkerExchangeTest.scala | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/main-actions/src/test/scala/sbt/internal/WorkerExchangeTest.scala b/main-actions/src/test/scala/sbt/internal/WorkerExchangeTest.scala index 24eeb87c2..fd64d7fa1 100644 --- a/main-actions/src/test/scala/sbt/internal/WorkerExchangeTest.scala +++ b/main-actions/src/test/scala/sbt/internal/WorkerExchangeTest.scala @@ -41,6 +41,7 @@ object WorkerExchangeTest extends Properties: yield withListener: l => w.println(s"""{"jsonrpc": "2.0", "method": "bye", "params": {}, "id": $i}""") val exitCode = w.blockForExitCode() + l.awaitResponse() Result .assert(exitCode == 0) .and(Result.assert(l.sb.toString() == s"""{ "jsonrpc": "2.0", "result": 0, "id": $i }""")) @@ -54,7 +55,12 @@ object WorkerExchangeTest extends Properties: finally WorkerExchange.unregisterListener(l) class ConcreteListener extends WorkerResponseListener: + import java.util.concurrent.{ CountDownLatch, TimeUnit } val sb = StringBuilder() + private val latch = CountDownLatch(1) def notifyExit(p: Process): Unit = () - def apply(line: String): Unit = sb.append(line) + def apply(line: String): Unit = + sb.append(line) + latch.countDown() + def awaitResponse(): Unit = latch.await(30, TimeUnit.SECONDS) end WorkerExchangeTest