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.
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.