Skip to content

Free the local references made for each inbound data channel message - #1

Merged
jlftt merged 1 commit into
masterfrom
claude/keen-brahmagupta-21higu
Oct 4, 2026
Merged

jlftt merged 1 commit into
masterfrom
claude/keen-brahmagupta-21higu

Conversation

@jlftt

@jlftt jlftt commented Oct 4, 2026

Copy link
Copy Markdown
Owner

OnMessage runs on a native WebRTC thread that stays attached to the JVM, so local references created there are only freed when they are deleted explicitly. Two leaked on every message: the RTCDataChannelBuffer handed to the observer (released from its JavaLocalRef instead of kept by it) and the direct ByteBuffer it wraps. A busy server keeps millions of them alive, growing the heap by roughly 100 MB an hour until it runs out.

Keep both in a JavaLocalRef so they are deleted when they go out of scope. The observer only reads the buffer during the call, as the native memory behind it is freed when OnMessage returns anyway.

Claude-Session: https://claude.ai/code/session_015jA6r9hShSX7PhQWhVa1g1

OnMessage runs on a native WebRTC thread that stays attached to the JVM,
so local references created there are only freed when they are deleted
explicitly. Two leaked on every message: the RTCDataChannelBuffer handed
to the observer (released from its JavaLocalRef instead of kept by it)
and the direct ByteBuffer it wraps. A busy server keeps millions of them
alive, growing the heap by roughly 100 MB an hour until it runs out.

Keep both in a JavaLocalRef so they are deleted when they go out of
scope. The observer only reads the buffer during the call, as the native
memory behind it is freed when OnMessage returns anyway.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015jA6r9hShSX7PhQWhVa1g1
@jlftt
jlftt merged commit 9c69a3c into master Oct 4, 2026
5 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants