From 7ff2a4959270048bc689e2dbca3d16641ef1c409 Mon Sep 17 00:00:00 2001 From: Adrian Niculescu <15037449+adrian-niculescu@users.noreply.github.com> Date: Tue, 25 Nov 2025 00:30:03 +0200 Subject: [PATCH] Fix race condition in PeerConnectionTransport.trackBitrates --- .changeset/fix-track-bitrates-race-condition.md | 5 +++++ .../io/livekit/android/room/PeerConnectionTransport.kt | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 .changeset/fix-track-bitrates-race-condition.md diff --git a/.changeset/fix-track-bitrates-race-condition.md b/.changeset/fix-track-bitrates-race-condition.md new file mode 100644 index 000000000..a992d1bd0 --- /dev/null +++ b/.changeset/fix-track-bitrates-race-condition.md @@ -0,0 +1,5 @@ +--- +"client-sdk-android": patch +--- + +Fixed race condition in `PeerConnectionTransport.trackBitrates` by ensuring writes happen on the RTC thread. \ No newline at end of file diff --git a/livekit-android-sdk/src/main/java/io/livekit/android/room/PeerConnectionTransport.kt b/livekit-android-sdk/src/main/java/io/livekit/android/room/PeerConnectionTransport.kt index efae279a4..3b3c88d1a 100644 --- a/livekit-android-sdk/src/main/java/io/livekit/android/room/PeerConnectionTransport.kt +++ b/livekit-android-sdk/src/main/java/io/livekit/android/room/PeerConnectionTransport.kt @@ -325,11 +325,15 @@ constructor( } fun registerTrackBitrateInfo(cid: String, trackBitrateInfo: TrackBitrateInfo) { - trackBitrates[TrackBitrateInfoKey.Cid(cid)] = trackBitrateInfo + executeRTCIfNotClosed { + trackBitrates[TrackBitrateInfoKey.Cid(cid)] = trackBitrateInfo + } } fun registerTrackBitrateInfo(transceiver: RtpTransceiver, trackBitrateInfo: TrackBitrateInfo) { - trackBitrates[TrackBitrateInfoKey.Transceiver(transceiver)] = trackBitrateInfo + executeRTCIfNotClosed { + trackBitrates[TrackBitrateInfoKey.Transceiver(transceiver)] = trackBitrateInfo + } } suspend fun isConnected(): Boolean {