Merge "Fix a lock issue in AudioPortEventHandler"

am: 0985eea389

Change-Id: If2113f4150e35c7aeb1751181dab8aa2ea05dee4
This commit is contained in:
Kyeongkab.Nam
2019-08-11 18:38:44 -07:00
committed by android-build-merger

View File

@@ -19,10 +19,12 @@ package android.media;
import android.annotation.UnsupportedAppUsage; import android.annotation.UnsupportedAppUsage;
import android.os.Handler; import android.os.Handler;
import android.os.HandlerThread; import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message; import android.os.Message;
import java.util.ArrayList;
import com.android.internal.annotations.GuardedBy;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.ArrayList;
/** /**
* The AudioPortEventHandler handles AudioManager.OnAudioPortUpdateListener callbacks * The AudioPortEventHandler handles AudioManager.OnAudioPortUpdateListener callbacks
@@ -33,6 +35,9 @@ import java.lang.ref.WeakReference;
class AudioPortEventHandler { class AudioPortEventHandler {
private Handler mHandler; private Handler mHandler;
private HandlerThread mHandlerThread; private HandlerThread mHandlerThread;
private final Object mLock = new Object();
@GuardedBy("mLock")
private final ArrayList<AudioManager.OnAudioPortUpdateListener> mListeners = private final ArrayList<AudioManager.OnAudioPortUpdateListener> mListeners =
new ArrayList<AudioManager.OnAudioPortUpdateListener>(); new ArrayList<AudioManager.OnAudioPortUpdateListener>();
@@ -53,7 +58,7 @@ class AudioPortEventHandler {
private long mJniCallback; private long mJniCallback;
void init() { void init() {
synchronized (this) { synchronized (mLock) {
if (mHandler != null) { if (mHandler != null) {
return; return;
} }
@@ -66,7 +71,7 @@ class AudioPortEventHandler {
@Override @Override
public void handleMessage(Message msg) { public void handleMessage(Message msg) {
ArrayList<AudioManager.OnAudioPortUpdateListener> listeners; ArrayList<AudioManager.OnAudioPortUpdateListener> listeners;
synchronized (this) { synchronized (mLock) {
if (msg.what == AUDIOPORT_EVENT_NEW_LISTENER) { if (msg.what == AUDIOPORT_EVENT_NEW_LISTENER) {
listeners = new ArrayList<AudioManager.OnAudioPortUpdateListener>(); listeners = new ArrayList<AudioManager.OnAudioPortUpdateListener>();
if (mListeners.contains(msg.obj)) { if (mListeners.contains(msg.obj)) {
@@ -152,7 +157,7 @@ class AudioPortEventHandler {
private native void native_finalize(); private native void native_finalize();
void registerListener(AudioManager.OnAudioPortUpdateListener l) { void registerListener(AudioManager.OnAudioPortUpdateListener l) {
synchronized (this) { synchronized (mLock) {
mListeners.add(l); mListeners.add(l);
} }
if (mHandler != null) { if (mHandler != null) {
@@ -162,7 +167,7 @@ class AudioPortEventHandler {
} }
void unregisterListener(AudioManager.OnAudioPortUpdateListener l) { void unregisterListener(AudioManager.OnAudioPortUpdateListener l) {
synchronized (this) { synchronized (mLock) {
mListeners.remove(l); mListeners.remove(l);
} }
} }