diff --git a/library/src/main/java/com/pedro/library/view/GlStreamInterface.kt b/library/src/main/java/com/pedro/library/view/GlStreamInterface.kt index fd318e227..3c97b53cc 100644 --- a/library/src/main/java/com/pedro/library/view/GlStreamInterface.kt +++ b/library/src/main/java/com/pedro/library/view/GlStreamInterface.kt @@ -348,7 +348,9 @@ class GlStreamInterface(private val context: Context): OnFrameAvailableListener, surfaceManager.swapBuffer() } } - val previewSnapshot = multiPreviewSurfaceManagers.values.toList() + // Not toList(): for one element it calls iterator().next(), which throws NoSuchElementException + // if that surface is removed from another thread in between. ArrayList copies via toArray(), which can't. + val previewSnapshot = ArrayList(multiPreviewSurfaceManagers.values) previewSnapshot.forEach { info -> if (info.surfaceManager.isReady) { if (info.surfaceManager.makeCurrent()) {