From 059d711acb6b69e5ba31d90446789360652fcbd0 Mon Sep 17 00:00:00 2001 From: davidliu Date: Mon, 16 Feb 2026 16:40:47 +0900 Subject: [PATCH] Properly clean up child jobs on ICE reconnect timeout --- .changeset/metal-mirrors-arrive.md | 5 ++++ .../java/io/livekit/android/room/RTCEngine.kt | 24 +++++++++---------- 2 files changed, 17 insertions(+), 12 deletions(-) create mode 100644 .changeset/metal-mirrors-arrive.md diff --git a/.changeset/metal-mirrors-arrive.md b/.changeset/metal-mirrors-arrive.md new file mode 100644 index 000000000..cb4e1132e --- /dev/null +++ b/.changeset/metal-mirrors-arrive.md @@ -0,0 +1,5 @@ +--- +"client-sdk-android": patch +--- + +Ensure child jobs are cleaned up on ICE reconnect timeout diff --git a/livekit-android-sdk/src/main/java/io/livekit/android/room/RTCEngine.kt b/livekit-android-sdk/src/main/java/io/livekit/android/room/RTCEngine.kt index 02b05b726..972dffa62 100644 --- a/livekit-android-sdk/src/main/java/io/livekit/android/room/RTCEngine.kt +++ b/livekit-android-sdk/src/main/java/io/livekit/android/room/RTCEngine.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023-2025 LiveKit, Inc. + * Copyright 2023-2026 LiveKit, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -620,20 +620,20 @@ internal constructor( break } - // wait until publisher ICE connected - var publisherWaitJob: Job? = null - if (hasPublished) { - publisherWaitJob = launch { - publisherObserver.waitUntilConnected() + withTimeoutOrNull(MAX_ICE_CONNECT_TIMEOUT_MS.toLong()) { + // wait until publisher ICE connected + var publisherWaitJob: Job? = null + if (hasPublished) { + publisherWaitJob = launch { + publisherObserver.waitUntilConnected() + } } - } - // wait until subscriber ICE connected - val subscriberWaitJob = launch { - subscriberObserver.waitUntilConnected() - } + // wait until subscriber ICE connected + val subscriberWaitJob = launch { + subscriberObserver.waitUntilConnected() + } - withTimeoutOrNull(MAX_ICE_CONNECT_TIMEOUT_MS.toLong()) { listOfNotNull(publisherWaitJob, subscriberWaitJob) .joinAll() }