livekit / client-sdk-android

LiveKit SDK for Android
https://docs.livekit.io
Apache License 2.0
174 stars 69 forks source link

ConcurrentModificationException #256

Open fiather opened 1 year ago

fiather commented 1 year ago

Occurs when a call is terminated or a new participant is created

Device Info:

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.

Oliver-WJ commented 10 months ago

I find same question