Skip to content

Claude/keen brahmagupta 21higu - #5

Closed
jlftt wants to merge 2 commits into
Kas-tle:masterfrom
jlftt:claude/keen-brahmagupta-21higu
Closed

jlftt wants to merge 2 commits into
Kas-tle:masterfrom
jlftt:claude/keen-brahmagupta-21higu

Conversation

@jlftt

@jlftt jlftt commented Oct 4, 2026

Copy link
Copy Markdown

No description provided.

claude added 2 commits October 4, 2026 01:23
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
Port the leak fixes from devopvoid/webrtc-java@8b77ec8 (#283) that apply
to this data-channel-only fork:

- RTCPeerConnection.close() cleared the Java handle but never released
  the reference createPeerConnection() had handed to Java, so every
  closed connection leaked the native PeerConnection and what it owned.
- RTCDataChannel.registerObserver() allocated a native observer and
  never kept it, so unregisterObserver() could not free it. Each one
  leaked along with the JNI global reference to the Java observer, which
  kept the whole closed Java channel reachable. The observer is now
  stored in an observerHandle field and freed when it is replaced,
  unregistered, or the channel is disposed.
- The data channel observer drops a callback instead of crashing when
  its thread can no longer attach to the JVM, during shutdown.

The ReplaceNativeObserver/ClearNativeObserver helpers come from the same
upstream commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015jA6r9hShSX7PhQWhVa1g1
@jlftt jlftt closed this Oct 4, 2026
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