diff options
| author | 2019-08-11 19:20:43 -0700 | |
|---|---|---|
| committer | 2019-08-11 19:20:43 -0700 | |
| commit | 4e2e511a8b49408495c53d0a39e7c6e698e2fd53 (patch) | |
| tree | 4ac513a3ccb62aca7163ba02c6f208672a90e76d | |
| parent | 0eaa12522b03a057d45a6c1d6bbc07f8b95f8a6a (diff) | |
| parent | 741db323d9a6822a5f3417de7a8d828132c50d70 (diff) | |
Merge "Fix a lock issue in AudioPortEventHandler" am: 0985eea389 am: 41c9e7092e am: 4b98ce6898 am: bb3c59e776
am: 741db323d9
Change-Id: I81e6ebc76cdc82e0622543bb8972beeae4bf03d1
| -rw-r--r-- | media/java/android/media/AudioPortEventHandler.java | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/media/java/android/media/AudioPortEventHandler.java b/media/java/android/media/AudioPortEventHandler.java index f9a4b1e90ad2..6d9d6265f5e7 100644 --- a/media/java/android/media/AudioPortEventHandler.java +++ b/media/java/android/media/AudioPortEventHandler.java @@ -19,10 +19,12 @@ package android.media; import android.annotation.UnsupportedAppUsage; import android.os.Handler; import android.os.HandlerThread; -import android.os.Looper; import android.os.Message; -import java.util.ArrayList; + +import com.android.internal.annotations.GuardedBy; + import java.lang.ref.WeakReference; +import java.util.ArrayList; /** * The AudioPortEventHandler handles AudioManager.OnAudioPortUpdateListener callbacks @@ -33,6 +35,9 @@ import java.lang.ref.WeakReference; class AudioPortEventHandler { private Handler mHandler; private HandlerThread mHandlerThread; + private final Object mLock = new Object(); + + @GuardedBy("mLock") private final ArrayList<AudioManager.OnAudioPortUpdateListener> mListeners = new ArrayList<AudioManager.OnAudioPortUpdateListener>(); @@ -53,7 +58,7 @@ class AudioPortEventHandler { private long mJniCallback; void init() { - synchronized (this) { + synchronized (mLock) { if (mHandler != null) { return; } @@ -66,7 +71,7 @@ class AudioPortEventHandler { @Override public void handleMessage(Message msg) { ArrayList<AudioManager.OnAudioPortUpdateListener> listeners; - synchronized (this) { + synchronized (mLock) { if (msg.what == AUDIOPORT_EVENT_NEW_LISTENER) { listeners = new ArrayList<AudioManager.OnAudioPortUpdateListener>(); if (mListeners.contains(msg.obj)) { @@ -152,7 +157,7 @@ class AudioPortEventHandler { private native void native_finalize(); void registerListener(AudioManager.OnAudioPortUpdateListener l) { - synchronized (this) { + synchronized (mLock) { mListeners.add(l); } if (mHandler != null) { @@ -162,7 +167,7 @@ class AudioPortEventHandler { } void unregisterListener(AudioManager.OnAudioPortUpdateListener l) { - synchronized (this) { + synchronized (mLock) { mListeners.remove(l); } } |