diff options
| -rw-r--r-- | media/java/android/media/AudioService.java | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java index 9bf8b2df0f62..b1b11a2ae9f2 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -752,10 +752,12 @@ public class AudioService extends IAudioService.Stub { private class SetModeDeathHandler implements IBinder.DeathRecipient { private IBinder mCb; // To be notified of client's death + private int mPid; private int mMode = AudioSystem.MODE_NORMAL; // Current mode set by this client SetModeDeathHandler(IBinder cb) { mCb = cb; + mPid = Binder.getCallingPid(); } public void binderDied() { @@ -786,6 +788,10 @@ public class AudioService extends IAudioService.Stub { } } + public int getPid() { + return mPid; + } + public void setMode(int mode) { mMode = mode; } @@ -1227,10 +1233,12 @@ public class AudioService extends IAudioService.Stub { private class ScoClient implements IBinder.DeathRecipient { private IBinder mCb; // To be notified of client's death + private int mCreatorPid; private int mStartcount; // number of SCO connections started by this client ScoClient(IBinder cb) { mCb = cb; + mCreatorPid = Binder.getCallingPid(); mStartcount = 0; } @@ -1323,9 +1331,9 @@ public class AudioService extends IAudioService.Stub { // the connection. broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_CONNECTING); // Accept SCO audio activation only in NORMAL audio mode or if the mode is - // currently controlled by the same client. + // currently controlled by the same client process. if ((AudioService.this.mMode == AudioSystem.MODE_NORMAL || - mSetModeDeathHandlers.get(0).getBinder() == mCb) && + mSetModeDeathHandlers.get(0).getPid() == mCreatorPid) && mBluetoothHeadsetDevice != null && (mScoAudioState == SCO_STATE_INACTIVE || mScoAudioState == SCO_STATE_DEACTIVATE_REQ)) { |