client-sdk-android
client-sdk-android copied to clipboard
ConcurrentModificationException
Occurs when a call is terminated or a new participant is created
Device Info:
- Device: SM-S908
- OS: [e.g. Android 13
- LiveKit SDK version: 1.2.1
08-28 11:57:54.156 E 11575 12158 AndroidRuntime: FATAL EXCEPTION: DefaultDispatcher-worker-3 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: Process: com.samsung.android.app.mango, PID: 11575 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: java.util.ConcurrentModificationException 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at java.util.ArrayList$Itr.next(ArrayList.java:860) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at io.livekit.android.room.track.VideoTrack.stop(VideoTrack.kt:27) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at io.livekit.android.room.track.RemoteVideoTrack.stop(RemoteVideoTrack.kt:68) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at io.livekit.android.room.participant.RemoteParticipant.unpublishTrack(RemoteParticipant.kt:159) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at io.livekit.android.room.Room.handleParticipantDisconnect(Room.kt:316) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at io.livekit.android.room.Room.onUpdateParticipants(Room.kt:690) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at io.livekit.android.room.RTCEngine.onParticipantUpdate(RTCEngine.kt:745) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at io.livekit.android.room.SignalClient.handleSignalResponseImpl(SignalClient.kt:567) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at io.livekit.android.room.SignalClient.access$handleSignalResponseImpl(SignalClient.kt:39) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at io.livekit.android.room.SignalClient$onReadyForResponses$1$1.emit(SignalClient.kt:190) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at io.livekit.android.room.SignalClient$onReadyForResponses$1$1.emit(SignalClient.kt:188) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at kotlinx.coroutines.flow.SharedFlowImpl.collect$suspendImpl(SharedFlow.kt:383) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at kotlinx.coroutines.flow.SharedFlowImpl$collect$1.invokeSuspend(Unknown Source:15) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:42) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664) 08-28 11:57:54.156 E 11575 12158 AndroidRuntime: Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@98db374, Dispatchers.IO]
override fun stop() { for (sink in sinks) { rtcTrack.removeSink(sink) } sinks.clear() super.stop() }
when the stop method of videoTrack operates, methods such as addRenderer and removeRenderer access the sink. At this time, exception may occur due to their methods.
it seems that it needs to be modified so that it cannot be accessed at the same time such as semaphore, mutex, etc.
I find same question