diff --git a/media/libstagefright/MediaCodecList.cpp b/media/libstagefright/MediaCodecList.cpp index 3d58d4b54d..a267f7e786 100644 --- a/media/libstagefright/MediaCodecList.cpp +++ b/media/libstagefright/MediaCodecList.cpp @@ -170,6 +170,7 @@ sp MediaCodecList::getLocalInstance() { sp MediaCodecList::sRemoteList; sp MediaCodecList::sBinderDeathObserver; +sp MediaCodecList::sMediaPlayer; // kept since linked to death void MediaCodecList::BinderDeathObserver::binderDied(const wp &who __unused) { Mutex::Autolock _l(sRemoteInitMutex); @@ -181,15 +182,14 @@ void MediaCodecList::BinderDeathObserver::binderDied(const wp &who __un sp MediaCodecList::getInstance() { Mutex::Autolock _l(sRemoteInitMutex); if (sRemoteList == nullptr) { - sp binder = - defaultServiceManager()->getService(String16("media.player")); + sMediaPlayer = defaultServiceManager()->getService(String16("media.player")); sp service = - interface_cast(binder); + interface_cast(sMediaPlayer); if (service.get() != nullptr) { sRemoteList = service->getCodecList(); if (sRemoteList != nullptr) { sBinderDeathObserver = new BinderDeathObserver(); - binder->linkToDeath(sBinderDeathObserver.get()); + sMediaPlayer->linkToDeath(sBinderDeathObserver.get()); } } if (sRemoteList == nullptr) { diff --git a/media/libstagefright/include/media/stagefright/MediaCodecList.h b/media/libstagefright/include/media/stagefright/MediaCodecList.h index e44b0a4573..e681d25c09 100644 --- a/media/libstagefright/include/media/stagefright/MediaCodecList.h +++ b/media/libstagefright/include/media/stagefright/MediaCodecList.h @@ -83,6 +83,7 @@ private: }; static sp sBinderDeathObserver; + static sp sMediaPlayer; static sp sCodecList; static sp sRemoteList; diff --git a/services/audiopolicy/service/AudioPolicyService.cpp b/services/audiopolicy/service/AudioPolicyService.cpp index 77f7997a2a..85ea94f177 100644 --- a/services/audiopolicy/service/AudioPolicyService.cpp +++ b/services/audiopolicy/service/AudioPolicyService.cpp @@ -29,7 +29,6 @@ #include #include #include -#include #include #include #include @@ -774,28 +773,26 @@ status_t AudioPolicyService::printHelp(int out) { // ----------- AudioPolicyService::UidPolicy implementation ---------- void AudioPolicyService::UidPolicy::registerSelf() { - ActivityManager am; - am.registerUidObserver(this, ActivityManager::UID_OBSERVER_GONE + status_t res = mAm.linkToDeath(this); + mAm.registerUidObserver(this, ActivityManager::UID_OBSERVER_GONE | ActivityManager::UID_OBSERVER_IDLE | ActivityManager::UID_OBSERVER_ACTIVE | ActivityManager::UID_OBSERVER_PROCSTATE, ActivityManager::PROCESS_STATE_UNKNOWN, String16("audioserver")); - status_t res = am.linkToDeath(this); if (!res) { Mutex::Autolock _l(mLock); mObserverRegistered = true; } else { ALOGE("UidPolicy::registerSelf linkToDeath failed: %d", res); - am.unregisterUidObserver(this); + mAm.unregisterUidObserver(this); } } void AudioPolicyService::UidPolicy::unregisterSelf() { - ActivityManager am; - am.unlinkToDeath(this); - am.unregisterUidObserver(this); + mAm.unlinkToDeath(this); + mAm.unregisterUidObserver(this); Mutex::Autolock _l(mLock); mObserverRegistered = false; } diff --git a/services/audiopolicy/service/AudioPolicyService.h b/services/audiopolicy/service/AudioPolicyService.h index e467f704b3..74aea0da50 100644 --- a/services/audiopolicy/service/AudioPolicyService.h +++ b/services/audiopolicy/service/AudioPolicyService.h @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -387,6 +388,7 @@ private: wp mService; Mutex mLock; + ActivityManager mAm; bool mObserverRegistered; std::unordered_map> mOverrideUids; std::unordered_map> mCachedUids; diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp index 3e6210294b..e663485cd9 100644 --- a/services/camera/libcameraservice/CameraService.cpp +++ b/services/camera/libcameraservice/CameraService.cpp @@ -2607,14 +2607,13 @@ void CameraService::Client::OpsCallback::opChanged(int32_t op, void CameraService::UidPolicy::registerSelf() { Mutex::Autolock _l(mUidLock); - ActivityManager am; if (mRegistered) return; - am.registerUidObserver(this, ActivityManager::UID_OBSERVER_GONE + status_t res = mAm.linkToDeath(this); + mAm.registerUidObserver(this, ActivityManager::UID_OBSERVER_GONE | ActivityManager::UID_OBSERVER_IDLE | ActivityManager::UID_OBSERVER_ACTIVE | ActivityManager::UID_OBSERVER_PROCSTATE, ActivityManager::PROCESS_STATE_UNKNOWN, String16("cameraserver")); - status_t res = am.linkToDeath(this); if (res == OK) { mRegistered = true; ALOGV("UidPolicy: Registered with ActivityManager"); @@ -2624,9 +2623,8 @@ void CameraService::UidPolicy::registerSelf() { void CameraService::UidPolicy::unregisterSelf() { Mutex::Autolock _l(mUidLock); - ActivityManager am; - am.unregisterUidObserver(this); - am.unlinkToDeath(this); + mAm.unregisterUidObserver(this); + mAm.unlinkToDeath(this); mRegistered = false; mActiveUids.clear(); ALOGV("UidPolicy: Unregistered with ActivityManager"); diff --git a/services/camera/libcameraservice/CameraService.h b/services/camera/libcameraservice/CameraService.h index 065157dad4..cf93a4147c 100644 --- a/services/camera/libcameraservice/CameraService.h +++ b/services/camera/libcameraservice/CameraService.h @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -564,6 +565,7 @@ private: Mutex mUidLock; bool mRegistered; + ActivityManager mAm; wp mService; std::unordered_set mActiveUids; // Monitored uid map to cached procState and refCount pair