diff --git a/media/libaudioclient/AudioSystem.cpp b/media/libaudioclient/AudioSystem.cpp index 1c4a80e82a..39ee437044 100644 --- a/media/libaudioclient/AudioSystem.cpp +++ b/media/libaudioclient/AudioSystem.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -75,7 +76,9 @@ const sp AudioSystem::get_audio_flinger() af = gAudioFlinger; } if (afc != 0) { + int64_t token = IPCThreadState::self()->clearCallingIdentity(); af->registerClient(afc); + IPCThreadState::self()->restoreCallingIdentity(token); } return af; } @@ -767,7 +770,10 @@ const sp AudioSystem::get_audio_policy_service() ap = gAudioPolicyService; } if (apc != 0) { + int64_t token = IPCThreadState::self()->clearCallingIdentity(); ap->registerClient(apc); + ap->setAudioPortCallbacksEnabled(apc->isAudioPortCbEnabled()); + IPCThreadState::self()->restoreCallingIdentity(token); } return ap; diff --git a/media/libaudioclient/include/media/AudioSystem.h b/media/libaudioclient/include/media/AudioSystem.h index 22b700d6b7..0c4d6ee9a8 100644 --- a/media/libaudioclient/include/media/AudioSystem.h +++ b/media/libaudioclient/include/media/AudioSystem.h @@ -431,6 +431,7 @@ private: int addAudioPortCallback(const sp& callback); int removeAudioPortCallback(const sp& callback); + bool isAudioPortCbEnabled() const { return (mAudioPortCallbacks.size() != 0); } // DeathRecipient virtual void binderDied(const wp& who);