diff options
| author | 2022-05-06 01:18:43 +0000 | |
|---|---|---|
| committer | 2022-05-06 01:18:43 +0000 | |
| commit | 2a3064a28f9b2975bfa60e02a9c45af6fc5285e2 (patch) | |
| tree | 294a46c28113085c8e5124c34cb3d04bfb3fd6ec | |
| parent | abeb3828cb32c6431e3faf72b91111ba66721076 (diff) | |
| parent | 0f19cc3e903c2580a01e131dc3e09606854f1bd6 (diff) | |
Merge "Ensure that two threads cannot simultaneously close SurfaceImage" into tm-dev
| -rw-r--r-- | media/java/android/media/ImageReader.java | 9 |
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() { |