Skip to content

Free closed peer connections and data channel observers - #2

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

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.

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 merged commit 244728c into master Oct 4, 2026
7 of 27 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