summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Avichal Rakesh <arakesh@google.com> 2022-05-06 01:18:43 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-05-06 01:18:43 +0000
commit2a3064a28f9b2975bfa60e02a9c45af6fc5285e2 (patch)
tree294a46c28113085c8e5124c34cb3d04bfb3fd6ec
parentabeb3828cb32c6431e3faf72b91111ba66721076 (diff)
parent0f19cc3e903c2580a01e131dc3e09606854f1bd6 (diff)
Merge "Ensure that two threads cannot simultaneously close SurfaceImage" into tm-dev
-rw-r--r--media/java/android/media/ImageReader.java9
1 files changed, 8 insertions, 1 deletions
diff --git a/media/java/android/media/ImageReader.java b/media/java/android/media/ImageReader.java
index 70d6810d01ec..472586b5e519 100644
--- a/media/java/android/media/ImageReader.java
+++ b/media/java/android/media/ImageReader.java
@@ -643,6 +643,9 @@ public class ImageReader implements AutoCloseable {
/**
* <p>Return the frame to the ImageReader for reuse.</p>
+ *
+ * This method should only be called via {@link SurfaceImage#close} which ensures that image
+ * closing is atomic.
*/
private void releaseImage(Image i) {
if (! (i instanceof SurfaceImage) ) {
@@ -1125,6 +1128,8 @@ public class ImageReader implements AutoCloseable {
}
private class SurfaceImage extends android.media.Image {
+ private final Object mCloseLock = new Object();
+
public SurfaceImage(int format) {
mFormat = format;
mHardwareBufferFormat = ImageReader.this.mHardwareBufferFormat;
@@ -1139,7 +1144,9 @@ public class ImageReader implements AutoCloseable {
@Override
public void close() {
- ImageReader.this.releaseImage(this);
+ synchronized (this.mCloseLock) {
+ ImageReader.this.releaseImage(this);
+ }
}
public ImageReader getReader() {