Merge "Remove the active deletion action of callbacks" into main
diff --git a/health/aidl/default/Health.cpp b/health/aidl/default/Health.cpp
index b2c0f0a..a16087c 100644
--- a/health/aidl/default/Health.cpp
+++ b/health/aidl/default/Health.cpp
@@ -253,15 +253,6 @@
return healthd_config_->screen_on(&props);
}
-namespace {
-bool IsDeadObjectLogged(const ndk::ScopedAStatus& ret) {
- if (ret.isOk()) return false;
- if (ret.getStatus() == ::STATUS_DEAD_OBJECT) return true;
- LOG(ERROR) << "Cannot call healthInfoChanged on callback: " << ret.getDescription();
- return false;
-}
-} // namespace
-
//
// Subclass helpers / overrides
//
@@ -305,8 +296,10 @@
return ndk::ScopedAStatus::ok();
}
- if (auto res = callback->healthInfoChanged(health_info); IsDeadObjectLogged(res)) {
- (void)unregisterCallback(callback);
+ auto res = callback->healthInfoChanged(health_info);
+ if (!res.isOk()) {
+ LOG(DEBUG) << "Cannot call healthInfoChanged:" << res.getDescription()
+ << ". Do nothing here if callback is dead as it will be cleaned up later.";
}
return ndk::ScopedAStatus::ok();
}
@@ -353,13 +346,13 @@
void Health::OnHealthInfoChanged(const HealthInfo& health_info) {
// Notify all callbacks
std::unique_lock<decltype(callbacks_lock_)> lock(callbacks_lock_);
- // is_dead notifies a callback and return true if it is dead.
- auto is_dead = [&](const auto& linked) {
+ for (const auto& linked : callbacks_) {
auto res = linked->callback()->healthInfoChanged(health_info);
- return IsDeadObjectLogged(res);
- };
- auto it = std::remove_if(callbacks_.begin(), callbacks_.end(), is_dead);
- callbacks_.erase(it, callbacks_.end()); // calls unlinkToDeath on deleted callbacks.
+ if (!res.isOk()) {
+ LOG(DEBUG) << "Cannot call healthInfoChanged:" << res.getDescription()
+ << ". Do nothing here if callback is dead as it will be cleaned up later.";
+ }
+ }
lock.unlock();
// Let HalHealthLoop::OnHealthInfoChanged() adjusts uevent / wakealarm periods