-
Notifications
You must be signed in to change notification settings - Fork 122
Open
Labels
s: needs triageIssue waiting for triageIssue waiting for triaget: bugSomething isn't working as intendedSomething isn't working as intended
Description
Stacktrace
[03.09 22:06:12.869] ERROR: LEAK: Object "buffer (37 bytes)" was not property closed before it was garbage collected. A life-cycle back-trace (if any) is attached as suppressed exceptions. See https://netty.io/wiki/reference-counted-objects.html for more information.
io.netty5.buffer.LoggingLeakCallback$LeakReport: Object life-cycle trace:
Suppressed: io.netty5.buffer.internal.LifecycleTracer$Traceback: ALLOCATE (current acquires = 0) T-186650494us.
at io.netty5.buffer.internal.ResourceSupport.<init>(ResourceSupport.java:42)
at io.netty5.buffer.internal.AdaptableBuffer.<init>(AdaptableBuffer.java:28)
at eu.cloudnetservice.driver.impl.network.netty.memory.MemorySegmentBuffer.<init>(MemorySegmentBuffer.java:125)
at eu.cloudnetservice.driver.impl.network.netty.memory.MemorySegmentBuffer.<init>(MemorySegmentBuffer.java:107)
at eu.cloudnetservice.driver.impl.network.netty.memory.MemorySegmentMemoryManager.constructBuffer(MemorySegmentMemoryManager.java:65)
at eu.cloudnetservice.driver.impl.network.netty.memory.MemorySegmentMemoryManager.recoverMemory(MemorySegmentMemoryManager.java:130)
at io.netty5.buffer.pool.PooledBufferAllocator.allocate(PooledBufferAllocator.java:308)
at eu.cloudnetservice.driver.impl.network.netty.memory.MemorySegmentBuffer.copy(MemorySegmentBuffer.java:751)
at eu.cloudnetservice.driver.impl.network.netty.memory.MemorySegmentBuffer.copy(MemorySegmentBuffer.java:722)
at eu.cloudnetservice.driver.impl.network.netty.memory.MemorySegmentBuffer.copy(MemorySegmentBuffer.java:58)
at eu.cloudnetservice.driver.impl.network.netty.buffer.NettyImmutableDataBuf.readDataBuf(NettyImmutableDataBuf.java:160)
at eu.cloudnetservice.driver.impl.network.object.serializers.DataBufObjectSerializer.read(DataBufObjectSerializer.java:54)
at eu.cloudnetservice.driver.impl.network.object.DefaultObjectMapper.lambda$readObject$0(DefaultObjectMapper.java:349)
at eu.cloudnetservice.driver.impl.network.netty.buffer.NettyImmutableDataBuf.readNullable(NettyImmutableDataBuf.java:206)
at eu.cloudnetservice.driver.impl.network.netty.buffer.NettyImmutableDataBuf.readNullable(NettyImmutableDataBuf.java:197)
at eu.cloudnetservice.driver.impl.network.object.DefaultObjectMapper.readObject(DefaultObjectMapper.java:332)
at eu.cloudnetservice.driver.impl.network.object.data.DataClassSerializer.read(DataClassSerializer.java:98)
at eu.cloudnetservice.driver.impl.network.object.DefaultObjectMapper.lambda$readObject$0(DefaultObjectMapper.java:349)
at eu.cloudnetservice.driver.impl.network.netty.buffer.NettyImmutableDataBuf.readNullable(NettyImmutableDataBuf.java:206)
at eu.cloudnetservice.driver.impl.network.netty.buffer.NettyImmutableDataBuf.readNullable(NettyImmutableDataBuf.java:197)
at eu.cloudnetservice.driver.impl.network.object.DefaultObjectMapper.readObject(DefaultObjectMapper.java:332)
at eu.cloudnetservice.driver.impl.network.netty.buffer.NettyImmutableDataBuf.readObject(NettyImmutableDataBuf.java:181)
at eu.cloudnetservice.node.impl.network.listener.ChannelMessagePacketListener.handle(ChannelMessagePacketListener.java:64)
at eu.cloudnetservice.driver.impl.network.protocol.DefaultPacketListenerRegistry.handlePacket(DefaultPacketListenerRegistry.java:176)
at eu.cloudnetservice.driver.impl.network.netty.NettyNetworkHandler.doHandlePacket(NettyNetworkHandler.java:127)
at eu.cloudnetservice.driver.impl.network.netty.NettyNetworkHandler.handlePacket(NettyNetworkHandler.java:91)
at eu.cloudnetservice.driver.impl.network.netty.NettyNetworkHandler.lambda$messageReceived$0(NettyNetworkHandler.java:77)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1095)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:619)
at java.base/java.lang.Thread.run(Thread.java:1447)
Actions to reproduce
Create a listener for ChannelMessageReceiveEvent in the node. Throw an exception from that listener.
Congrats, you have leaked the memory of the ChannelMessage content DataBuf
CloudNet version
[03.09 22:14:31.846] INFO :
[03.09 22:14:31.847] INFO : CloudNet Blizzard 4.0.0-RC14-SNAPSHOT 80de83ac
[03.09 22:14:31.847] INFO : Discord: <https://discord.cloudnetservice.eu/>
[03.09 22:14:31.847] INFO :
[03.09 22:14:31.847] INFO : ClusterId: ae0bbf39-****-431d-****-857e2580ae85
[03.09 22:14:31.847] INFO : NodeId: Node-1
[03.09 22:14:31.847] INFO : Head-NodeId: Node-1
[03.09 22:14:31.847] INFO : CPU usage: (P/S) .4/4.61/100%
[03.09 22:14:31.847] INFO : Node services memory allocation (U/R/M): 8156/8156/16384 MB
[03.09 22:14:31.847] INFO : Threads: 68
[03.09 22:14:31.847] INFO : Heap usage: 159/256MB
[03.09 22:14:31.847] INFO : JVM: Eclipse Adoptium 24 (OpenJDK 64-Bit Server VM 24+36)
[03.09 22:14:31.847] INFO : Update Repo: CloudNetService/launchermeta, Update Branch: beta (development mode)
[03.09 22:14:31.847] INFO :
Other
If you have a ChannelMessageReceiveEvent listener that throws an exception in the node, then the message handling isn't continued. Instead it fails internally in cloudnet code and because of that creates a memory leak. Usually the ChannelMessage would be sent to the NodeCloudMessenger, but with the failing listener the exception propagates to the packet handler:
Exception whilst handling packet BasePacket(channel=1, dataBuf=NettyImmutableDataBuf[buffer=Buffer[roff:0, woff:0, cap:0]], prioritized=false, creationStamp=2025-09-03T20:03:06.218522229Z, uniqueId=86f1ccc5-023a-4d80-a0c7-f95899c9d317)
java.lang.IllegalStateException: Exception posting packet from channel 1 to handler eu.cloudnetservice.node.impl.network.listener.ChannelMessagePacketListener
at eu.cloudnetservice.driver.impl.network.protocol.DefaultPacketListenerRegistry.handlePacket(DefaultPacketListenerRegistry.java:178)
at eu.cloudnetservice.driver.impl.network.netty.NettyNetworkHandler.doHandlePacket(NettyNetworkHandler.java:127)
at eu.cloudnetservice.driver.impl.network.netty.NettyNetworkHandler.handlePacket(NettyNetworkHandler.java:91)
at eu.cloudnetservice.driver.impl.network.netty.NettyNetworkHandler.lambda$messageReceived$0(NettyNetworkHandler.java:77)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1095)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:619)
at java.base/java.lang.Thread.run(Thread.java:1447)
Caused by: eu.cloudnetservice.driver.event.EventListenerException: Error while invoking event listener handle in class eu.darkcube.system.impl.cloudnet.network.NetworkingImpl$Listener
at eu.cloudnetservice.driver.impl.event.DefaultRegisteredEventListener.fireEvent(DefaultRegisteredEventListener.java:106)
at eu.cloudnetservice.driver.impl.event.DefaultEventManager.callEvent(DefaultEventManager.java:91)
at eu.cloudnetservice.driver.event.EventManager.callEvent(EventManager.java:75)
at eu.cloudnetservice.node.impl.network.listener.ChannelMessagePacketListener.handle(ChannelMessagePacketListener.java:83)
at eu.cloudnetservice.driver.impl.network.protocol.DefaultPacketListenerRegistry.handlePacket(DefaultPacketListenerRegistry.java:176)
... 6 common frames omitted
Caused by:
my custom listener
Instead of this behavior I'd expect the failing listener to still print the exception stacktrace, but the cloudnet-internal code should keep working and no memory leak should be caused
Issue uniqueness
- Yes, this issue is unique. There are no similar issues.
Metadata
Metadata
Assignees
Labels
s: needs triageIssue waiting for triageIssue waiting for triaget: bugSomething isn't working as intendedSomething isn't working as intended