Thanks to visit codestin.com
Credit goes to github.com

Skip to content

MatchError: null in ChannelExecutor.unwind #7720

@rfkm

Description

@rfkm

Hello. I was running benchmarks for my program and encountered a strange error randomly:

Exception in thread "main" Exception in thread "zio-fiber-9207130" scala.MatchError: null
        at zio.stream.internal.ChannelExecutor.unwind$1(ChannelExecutor.scala:39)
        at zio.stream.internal.ChannelExecutor.popAllFinalizers(ChannelExecutor.scala:45)
        at zio.stream.internal.ChannelExecutor.close(ChannelExecutor.scala:92)
        at zio.stream.internal.ChannelExecutor.restorePipe(ChannelExecutor.scala:25)
        at zio.stream.internal.ChannelExecutor.$anonfun$run$13(ChannelExecutor.scala:194)
        at zio.stream.internal.ChannelExecutor.$anonfun$popAllFinalizers$1(ChannelExecutor.scala:41)
        at zio.ZIO.$anonfun$$times$greater$1(ZIO.scala:89)
        at <empty>.Demo.main.fa(Demo.scala:7)
        at <empty>.Demo.main.fa(Demo.scala:6)
        at <empty>.Demo.main.fa(Demo.scala:8)
        at <empty>.Demo.main(Demo.scala:12)
Caused by: scala.MatchError: null
        at zio.stream.internal.ChannelExecutor.unwind$1(ChannelExecutor.scala:39)
        at zio.stream.internal.ChannelExecutor.popAllFinalizers(ChannelExecutor.scala:45)
        at zio.stream.internal.ChannelExecutor.close(ChannelExecutor.scala:92)
        at zio.stream.internal.ChannelExecutor.restorePipe(ChannelExecutor.scala:25)
        at zio.stream.internal.ChannelExecutor.$anonfun$run$13(ChannelExecutor.scala:194)
        at zio.stream.internal.ChannelExecutor.$anonfun$popAllFinalizers$1(ChannelExecutor.scala:41)
        at zio.ZIO.$anonfun$$times$greater$1(ZIO.scala:89)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1218)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1218)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1011)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:1218)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.runLoop(FiberRuntime.scala:934)
        at zio.internal.FiberRuntime.evaluateEffect(FiberRuntime.scala:389)
        at zio.internal.FiberRuntime.evaluateMessageWhileSuspended(FiberRuntime.scala:512)
        at zio.internal.FiberRuntime.drainQueueOnCurrentThread(FiberRuntime.scala:229)
        at zio.internal.FiberRuntime.run(FiberRuntime.scala:138)
        at zio.internal.ZScheduler$$anon$4.run(ZScheduler.scala:476)

I can reproduce the problem in my environment with the following code:

import zio.stream.ZStream
import zio.Unsafe
import zio.ZIO

object Demo {
  def main(args: Array[String]): Unit = {
    val fa = ZStream.unwrapScoped {
      ZStream.range(0, 100).toQueue().map(q => ZStream.fromQueue(q).flattenTake)
    }.runDrain

    Unsafe.unsafe { implicit unsafe =>
      while (true) // Also reproduced by `fa.forever`.
        zio.Runtime.default.unsafe.run(fa).getOrThrowFiberFailure()
    }
  }
}

The time it takes for the error to occur is random. In my environment, it can be anywhere from a few minutes to a few dozen minutes.

ZIO: 2.0.5, 2.0.6
JVM: Temurin-11.0.17+8
Scala: 2.13.10

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions