From 55e85f4fd2ddc8bc40f58a0ad9c4411cfcfa3a3a Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Mon, 7 Oct 2019 17:12:48 +0200 Subject: [PATCH] Use CopyOnWrite set in GL preview (Fix #626) --- .../cameraview/preview/GlCameraPreview.java | 28 +++++++------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java b/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java index 5627303a..4e32e1ef 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java @@ -23,6 +23,7 @@ import com.otaliastudios.cameraview.size.AspectRatio; import java.util.Collections; import java.util.HashSet; import java.util.Set; +import java.util.concurrent.CopyOnWriteArraySet; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; @@ -69,8 +70,9 @@ public class GlCameraPreview extends FilterCameraPreview mRendererFrameCallbacks - = Collections.synchronizedSet(new HashSet()); + // A synchronized set was not enough to avoid crashes, probably due to external classes + // removing the callback while this set is being iterated. CopyOnWriteArraySet solves this. + private final Set mRendererFrameCallbacks = new CopyOnWriteArraySet<>(); @VisibleForTesting float mCropScaleX = 1F; @VisibleForTesting float mCropScaleY = 1F; private View mRootView; @@ -156,11 +158,8 @@ public class GlCameraPreview extends FilterCameraPreview