Update activeConfigsChangedBroadcast
avoid using intentsender in #sendActiveConfigsChangedBroadcast
and #removeActiveConfigsChangedBroadcast.
Bug: 146074295
Test: Ran GTS Tests
Change-Id: I9313299ea0bc89f092b1c62fbfc34e06a127eaa9
diff --git a/cmds/statsd/src/config/ConfigManager.cpp b/cmds/statsd/src/config/ConfigManager.cpp
index 7bfb991..55d73c1 100644
--- a/cmds/statsd/src/config/ConfigManager.cpp
+++ b/cmds/statsd/src/config/ConfigManager.cpp
@@ -63,6 +63,24 @@
}
};
+class ActiveConfigChangedReceiverDeathRecipient : public android::IBinder::DeathRecipient {
+ public:
+ ActiveConfigChangedReceiverDeathRecipient(sp<ConfigManager> configManager, const int uid):
+ mConfigManager(configManager),
+ mUid(uid) {}
+ ~ActiveConfigChangedReceiverDeathRecipient() override = default;
+ private:
+ sp<ConfigManager> mConfigManager;
+ int mUid;
+
+ void binderDied(const android::wp<android::IBinder>& who) override {
+ if (IInterface::asBinder(mConfigManager->GetActiveConfigsChangedReceiver(mUid))
+ == who.promote()) {
+ mConfigManager->RemoveActiveConfigsChangedReceiver(mUid);
+ }
+ }
+};
+
ConfigManager::ConfigManager() {
}
@@ -148,9 +166,11 @@
}
void ConfigManager::SetActiveConfigsChangedReceiver(const int uid,
- const sp<IBinder>& intentSender) {
+ const sp<IPendingIntentRef>& pir) {
lock_guard<mutex> lock(mMutex);
- mActiveConfigsChangedReceivers[uid] = intentSender;
+ mActiveConfigsChangedReceivers[uid] = pir;
+ IInterface::asBinder(pir)->linkToDeath(
+ new ActiveConfigChangedReceiverDeathRecipient(this, uid));
}
void ConfigManager::RemoveActiveConfigsChangedReceiver(const int uid) {
@@ -296,7 +316,7 @@
}
}
-const sp<android::IBinder> ConfigManager::GetActiveConfigsChangedReceiver(const int uid) const {
+const sp<IPendingIntentRef> ConfigManager::GetActiveConfigsChangedReceiver(const int uid) const {
lock_guard<mutex> lock(mMutex);
auto it = mActiveConfigsChangedReceivers.find(uid);