Merge "Fix a lock issue in AudioPortEventHandler" am: 0985eea389
am: 41c9e7092e
Change-Id: I27966dd0d709e66a624ee1fc1b5045132a24385b
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user