diff options
author | Wonsik Kim <wonsik@google.com> | 2018-09-13 13:15:59 -0700 |
---|---|---|
committer | Wonsik Kim <wonsik@google.com> | 2018-09-14 14:37:10 -0700 |
commit | 61796fdaa16ea6c8567215c255fc43c43cf4ee38 (patch) | |
tree | 263fddd15060905cd93b1a04b3097de8dd11319c /media/java/android/media/MediaCodec.java | |
parent | 79a85ae200d8d30bfa41a607b4acdf3b34d72814 (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.java | 15 |
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 { |