summaryrefslogtreecommitdiff
path: root/media/java/android/media/MediaCodec.java
diff options
context:
space:
mode:
authorWonsik Kim <wonsik@google.com>2018-09-13 13:15:59 -0700
committerWonsik Kim <wonsik@google.com>2018-09-14 14:37:10 -0700
commit61796fdaa16ea6c8567215c255fc43c43cf4ee38 (patch)
tree263fddd15060905cd93b1a04b3097de8dd11319c /media/java/android/media/MediaCodec.java
parent79a85ae200d8d30bfa41a607b4acdf3b34d72814 (diff)
media: fix race condition around release
Protect native context for MediaCodec object from concurrent access. Bug: 112863346 Bug: 112913410 Test: atest frameworks/av/media/libstagefright:postsubmit Change-Id: Icacdd45bd6dcb0b03e2760a3441d2e7c7587d3ec
Diffstat (limited to 'media/java/android/media/MediaCodec.java')
-rw-r--r--media/java/android/media/MediaCodec.java15
1 files changed, 14 insertions, 1 deletions
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java
index d1d605fc8399..1d27c03e1dcb 100644
--- a/media/java/android/media/MediaCodec.java
+++ b/media/java/android/media/MediaCodec.java
@@ -43,6 +43,8 @@ import java.nio.ReadOnlyBufferException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
/**
MediaCodec class can be used to access low-level media codecs, i.e. encoder/decoder components.
@@ -3582,7 +3584,18 @@ final public class MediaCodec {
}
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
- private long mNativeContext;
+ private long mNativeContext = 0;
+ private final Lock mNativeContextLock = new ReentrantLock();
+
+ private final long lockAndGetContext() {
+ mNativeContextLock.lock();
+ return mNativeContext;
+ }
+
+ private final void setAndUnlockContext(long context) {
+ mNativeContext = context;
+ mNativeContextLock.unlock();
+ }
/** @hide */
public static class MediaImage extends Image {