Merge "Ensure that two threads cannot simultaneously close SurfaceImage" into tm-dev am: 2a3064a28f

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18152523

Change-Id: Ib25bbbab956e5874729eed6922ede960190d5125
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Avichal Rakesh
2022-05-06 01:44:35 +00:00
committed by Automerger Merge Worker

View File

@@ -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() {