Anamorphosee / stacktrace-decoroutinator

Small lib for recovering stack trace in exceptions thrown in Kotlin coroutines
Apache License 2.0
202 stars 5 forks source link

Ktor stops listening to incoming connection when SD is enabled #10

Closed Anamorphosee closed 2 years ago

Anamorphosee commented 2 years ago
    System.setProperty(
        "dev.reformator.stacktracedecoroutinator.jvmAgentDebugMetadataInfoResolveStrategy",
        "SYSTEM_RESOURCE"
    )

solves the problem

Anamorphosee commented 2 years ago

found core problem:

java.lang.LinkageError: loader 'app' attempted duplicate class definition for io.ktor.utils.io.ByteBufferChannel. (io.ktor.utils.io.ByteBufferChannel is in unnamed module of loader 'app')

Second definition occurs inside ASM:

``` "eventLoopGroupProxy-3-1@4257" daemon prio=5 tid=0x17 nid=NA runnable java.lang.Thread.State: RUNNABLE at java.lang.ClassLoader.loadClass(ClassLoader.java:519) at java.lang.Class.forName0(Class.java:-1) at java.lang.Class.forName(Class.java:466) at org.objectweb.asm.ClassWriter.getCommonSuperClass(ClassWriter.java:1017) at org.objectweb.asm.SymbolTable.addMergedType(SymbolTable.java:1202) at org.objectweb.asm.Frame.merge(Frame.java:1299) at org.objectweb.asm.Frame.merge(Frame.java:1244) at org.objectweb.asm.MethodWriter.computeAllFrames(MethodWriter.java:1610) at org.objectweb.asm.MethodWriter.visitMaxs(MethodWriter.java:1546) at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:769) at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:649) at org.objectweb.asm.tree.ClassNode.accept(ClassNode.java:452) at dev.reformator.stacktracedecoroutinator.jvmagentcommon.ClassTransformerKt.getClassBody(classTransformer.kt:84) at dev.reformator.stacktracedecoroutinator.jvmagentcommon.ClassTransformerKt.access$getClassBody(classTransformer.kt:1) at dev.reformator.stacktracedecoroutinator.jvmagentcommon.DecoroutinatorClassFileTransformer.transform(classTransformer.kt:78) at java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:244) at sun.instrument.TransformerManager.transform(TransformerManager.java:188) at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:565) at java.lang.ClassLoader.defineClass1(ClassLoader.java:-1) at java.lang.ClassLoader.defineClass(ClassLoader.java:1010) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) at jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:855) at jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:753) at jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:676) - locked <0x1288> (a java.lang.Object) at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:634) at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) at java.lang.ClassLoader.loadClass(ClassLoader.java:519) at io.ktor.utils.io.ByteChannelKt.ByteChannel(ByteChannel.kt:14) at io.ktor.utils.io.ByteChannelKt.ByteChannel$default(ByteChannel.kt:14) at io.ktor.utils.io.ByteReadChannel$Companion$Empty$2.invoke(ByteReadChannelJVM.kt:246) at io.ktor.utils.io.ByteReadChannel$Companion$Empty$2.invoke(ByteReadChannelJVM.kt:246) at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74) - locked <0x1289> (a kotlin.SynchronizedLazyImpl) at io.ktor.utils.io.ByteReadChannel$Companion.getEmpty(ByteReadChannelJVM.kt:246) at io.ktor.server.netty.http1.NettyHttp1ApplicationCall.(NettyHttp1ApplicationCall.kt:29) at io.ktor.server.netty.http1.NettyHttp1Handler.prepareCallFromRequest(NettyHttp1Handler.kt:139) at io.ktor.server.netty.http1.NettyHttp1Handler.handleRequest(NettyHttp1Handler.kt:113) at io.ktor.server.netty.http1.NettyHttp1Handler.channelRead(NettyHttp1Handler.kt:81) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93) at io.netty.handler.codec.http.HttpServerExpectContinueHandler.channelRead(HttpServerExpectContinueHandler.java:95) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:327) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:299) at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.ktor.server.netty.EventLoopGroupProxy$Companion.create$lambda-1$lambda-0(NettyApplicationEngine.kt:260) at io.ktor.server.netty.EventLoopGroupProxy$Companion$$Lambda$99/0x0000000800d34320.run(Unknown Source:-1) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:831) ```
Anamorphosee commented 2 years ago

fixed in 2.3.2