From 89d0dca551cdee2a406c104f5eca83be0184302e Mon Sep 17 00:00:00 2001 From: Pritam Kadam Date: Mon, 20 May 2024 09:40:51 -0500 Subject: [PATCH] Fix slow slink guarantees --- .../src/test/scala/zio/stream/ZStreamSpec.scala | 11 +++++++++++ .../shared/src/main/scala/zio/stream/ZChannel.scala | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/streams-tests/shared/src/test/scala/zio/stream/ZStreamSpec.scala b/streams-tests/shared/src/test/scala/zio/stream/ZStreamSpec.scala index 7cd9642ee3e6..aeb72e7e6c46 100644 --- a/streams-tests/shared/src/test/scala/zio/stream/ZStreamSpec.scala +++ b/streams-tests/shared/src/test/scala/zio/stream/ZStreamSpec.scala @@ -3725,6 +3725,17 @@ object ZStreamSpec extends ZIOBaseSpec { _ <- stream.tapSink(sink).take(3).runDrain result <- ref.get } yield assertTrue(result == 6) + }, + test("slow sink") { + for { + ref <- Ref.make(0) + stream = ZStream(1, 2, 3, 4, 5).rechunk(1).forever + sink = ZSink.foreach((n: Int) => ZIO.sleep(2.second) *> ref.update(_ + n)) + fib <- stream.tapSink(sink).take(1).mapZIO(a => ZIO.sleep(1.second) *> ZIO.succeed(a)).runCollect.fork + _ <- TestClock.adjust(3.seconds) + res <- fib.join + result <- ref.get + } yield assert(result)(equalTo(1)) && assert(res)(equalTo(Chunk(1))) } ), suite("throttleEnforce")( diff --git a/streams/shared/src/main/scala/zio/stream/ZChannel.scala b/streams/shared/src/main/scala/zio/stream/ZChannel.scala index a86bca2b56c6..125c48651149 100644 --- a/streams/shared/src/main/scala/zio/stream/ZChannel.scala +++ b/streams/shared/src/main/scala/zio/stream/ZChannel.scala @@ -857,7 +857,7 @@ sealed trait ZChannel[-Env, -InErr, -InElem, -InDone, +OutErr, +OutElem, +OutDon } ZChannel - .fromZIO(pullL.forkIn(scope).zipWith(pullR.forkIn(scope))(BothRunning(_, _): MergeState)) + .fromZIO(pullL.forkDaemon.zipWith(pullR.forkDaemon)(BothRunning(_, _): MergeState)) .flatMap(go) .embedInput(input) }