diff options
author | Eric Laurent <elaurent@google.com> | 2013-03-11 18:52:57 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-03-12 21:40:25 +0000 |
commit | f5a1fc3c0fd733acd21e1437f153ba27220be8ce (patch) | |
tree | 5098408662022bd47def4cf33217566bc7735783 /media | |
parent | 93f99846df1e00f115c8870eab6ef3df54d1ec6a (diff) | |
download | frameworks_base-f5a1fc3c0fd733acd21e1437f153ba27220be8ce.zip frameworks_base-f5a1fc3c0fd733acd21e1437f153ba27220be8ce.tar.gz frameworks_base-f5a1fc3c0fd733acd21e1437f153ba27220be8ce.tar.bz2 |
audio service: fix regression in startBluetoothSco
Commit 2a57ca93 introduced a regression in startBluetoothSco()
where the calling pid was cleared before creating the entry for
the client app. The pid in the entry was always the system server pid
and the SCO client verification logic was broken preventing the activation
of the BT SCO connection.
Change-Id: I4e024b22fceb350f829ff0d8664703faeef7af48
Diffstat (limited to 'media')
-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 882a635..f0a5c28 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -1948,8 +1948,13 @@ public class AudioService extends IAudioService.Stub implements OnFinished { !mBootCompleted) { return; } - final long ident = Binder.clearCallingIdentity(); ScoClient client = getScoClient(cb, true); + // The calling identity must be cleared before calling ScoClient.incCount(). + // inCount() calls requestScoState() which in turn can call BluetoothHeadset APIs + // and this must be done on behalf of system server to make sure permissions are granted. + // The caller identity must be cleared after getScoClient() because it is needed if a new + // client is created. + final long ident = Binder.clearCallingIdentity(); client.incCount(); Binder.restoreCallingIdentity(ident); } @@ -1960,8 +1965,11 @@ public class AudioService extends IAudioService.Stub implements OnFinished { !mBootCompleted) { return; } - final long ident = Binder.clearCallingIdentity(); ScoClient client = getScoClient(cb, false); + // The calling identity must be cleared before calling ScoClient.decCount(). + // decCount() calls requestScoState() which in turn can call BluetoothHeadset APIs + // and this must be done on behalf of system server to make sure permissions are granted. + final long ident = Binder.clearCallingIdentity(); if (client != null) { client.decCount(); } |