summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media/java/android/media/AudioService.java5
-rw-r--r--media/java/android/media/AudioSystem.java19
2 files changed, 19 insertions, 5 deletions
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 6c85490bb1c5..1fe3ccc2c83c 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -1945,10 +1945,11 @@ public class AudioService extends IAudioService.Stub {
break;
case MSG_MEDIA_SERVER_DIED:
- // Force creation of new IAudioflinger interface
if (!mMediaServerOk) {
Log.e(TAG, "Media server died.");
- AudioSystem.isMicrophoneMuted();
+ // Force creation of new IAudioFlinger interface so that we are notified
+ // when new media_server process is back to life.
+ AudioSystem.setErrorCallback(mAudioSystemCallback);
sendMsg(mAudioHandler, MSG_MEDIA_SERVER_DIED, SHARED_MSG, SENDMSG_NOOP, 0, 0,
null, 500);
}
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index e20bb2510d9f..ca881afb9cf4 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -218,13 +218,26 @@ public class AudioSystem
*/
public static void setErrorCallback(ErrorCallback cb)
{
- mErrorCallback = cb;
+ synchronized (AudioSystem.class) {
+ mErrorCallback = cb;
+ }
+ // Calling a method on AudioFlinger here makes sure that we bind to IAudioFlinger
+ // binder interface death. Not doing that would result in not being notified of
+ // media_server process death if no other method is called on AudioSystem that reaches
+ // to AudioFlinger.
+ isMicrophoneMuted();
}
private static void errorCallbackFromNative(int error)
{
- if (mErrorCallback != null) {
- mErrorCallback.onError(error);
+ ErrorCallback errorCallback = null;
+ synchronized (AudioSystem.class) {
+ if (mErrorCallback != null) {
+ errorCallback = mErrorCallback;
+ }
+ }
+ if (errorCallback != null) {
+ errorCallback.onError(error);
}
}