fix: delete the local references created for received data channel messages - #272
Merged
devopvoid merged 1 commit intoSep 7, 2026
Merged
Conversation
…ssages RTCDataChannelObserver::OnMessage runs on a libwebrtc thread that stays attached to the JVM for its whole life, so JNI local references it creates are never reclaimed on their own. It created two per message and deleted neither: the direct ByteBuffer wrapping the payload, and the RTCDataChannelBuffer, which was handed to the callback with release() so the wrapper never deleted it. Every received message therefore leaked both objects until the process exited. The buffer factory now deletes the ByteBuffer reference once the RTCDataChannelBuffer holds it, and the observer passes the buffer with get() so the wrapper deletes it after the callback returns, as every other callback in the project does.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
RTCDataChannelObserver::OnMessageruns on a libwebrtc thread that stays attached to the JVM for its whole life, so JNI local references it creates are never reclaimed on their own. It created two per received message and deleted neither: the directByteBufferwrapping the payload, and theRTCDataChannelBuffer, which was handed to the callback withrelease()so the wrapper never deleted it. Every received message therefore leaked both objects until the process exited, which is the growth reported in #265. The buffer factory now deletes theByteBufferreference once theRTCDataChannelBufferholds it, and the observer passes the buffer withget()so the wrapper deletes it after the callback returns, as every other callback in the project does.Fixes #265