Merge "health: Check return value of LinkedCallback::Make." into main am: af52e698da am: 30525c3b18 am: 390416afba am: 589e7010a5 am: 4d568fdbb9 am: 2613d6735a

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2651239

Change-Id: Ifee664f55dfce9f8a27b51fc3edea2e17f919c0a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot 2023-07-08 00:30:12 +00:00 committed by Automerger Merge Worker
commit da4428be6e
3 changed files with 10 additions and 5 deletions

View file

@ -273,7 +273,11 @@ ndk::ScopedAStatus Health::registerCallback(const std::shared_ptr<IHealthInfoCal
{ {
std::lock_guard<decltype(callbacks_lock_)> lock(callbacks_lock_); std::lock_guard<decltype(callbacks_lock_)> lock(callbacks_lock_);
callbacks_.emplace_back(LinkedCallback::Make(ref<Health>(), callback)); auto linked_callback_result = LinkedCallback::Make(ref<Health>(), callback);
if (!linked_callback_result.ok()) {
return ndk::ScopedAStatus::fromStatus(-linked_callback_result.error().code());
}
callbacks_.emplace_back(std::move(*linked_callback_result));
// unlock // unlock
} }

View file

@ -24,7 +24,7 @@
namespace aidl::android::hardware::health { namespace aidl::android::hardware::health {
std::unique_ptr<LinkedCallback> LinkedCallback::Make( ::android::base::Result<std::unique_ptr<LinkedCallback>> LinkedCallback::Make(
std::shared_ptr<Health> service, std::shared_ptr<IHealthInfoCallback> callback) { std::shared_ptr<Health> service, std::shared_ptr<IHealthInfoCallback> callback) {
std::unique_ptr<LinkedCallback> ret(new LinkedCallback()); std::unique_ptr<LinkedCallback> ret(new LinkedCallback());
binder_status_t linkRet = binder_status_t linkRet =
@ -32,7 +32,7 @@ std::unique_ptr<LinkedCallback> LinkedCallback::Make(
reinterpret_cast<void*>(ret.get())); reinterpret_cast<void*>(ret.get()));
if (linkRet != ::STATUS_OK) { if (linkRet != ::STATUS_OK) {
LOG(WARNING) << __func__ << "Cannot link to death: " << linkRet; LOG(WARNING) << __func__ << "Cannot link to death: " << linkRet;
return nullptr; return ::android::base::Error(-linkRet);
} }
ret->service_ = service; ret->service_ = service;
ret->callback_ = std::move(callback); ret->callback_ = std::move(callback);

View file

@ -20,6 +20,7 @@
#include <aidl/android/hardware/health/IHealthInfoCallback.h> #include <aidl/android/hardware/health/IHealthInfoCallback.h>
#include <android-base/macros.h> #include <android-base/macros.h>
#include <android-base/result.h>
#include <android/binder_auto_utils.h> #include <android/binder_auto_utils.h>
#include <health-impl/Health.h> #include <health-impl/Health.h>
@ -34,8 +35,8 @@ class LinkedCallback {
// service->death_reciepient() should be from CreateDeathRecipient(). // service->death_reciepient() should be from CreateDeathRecipient().
// Not using a strong reference to |service| to avoid circular reference. The lifetime // Not using a strong reference to |service| to avoid circular reference. The lifetime
// of |service| must be longer than this LinkedCallback object. // of |service| must be longer than this LinkedCallback object.
static std::unique_ptr<LinkedCallback> Make(std::shared_ptr<Health> service, static ::android::base::Result<std::unique_ptr<LinkedCallback>> Make(
std::shared_ptr<IHealthInfoCallback> callback); std::shared_ptr<Health> service, std::shared_ptr<IHealthInfoCallback> callback);
// Automatically unlinkToDeath upon destruction. So, it is always safe to reinterpret_cast // Automatically unlinkToDeath upon destruction. So, it is always safe to reinterpret_cast
// the cookie back to the LinkedCallback object. // the cookie back to the LinkedCallback object.